Hi everyone! I'm new to Programmers' Heaven and programming. I took the intiative recently to teach myself C# programming. Currently I'm reading the book "Microsoft C Sharp Programming for the Absolute Beginner" by Andy Harris. I've found the book easy to read and follow. But I started experimenting with the code presented in the first chapter and I've run into bugs already! Every time I compile I get the error message, "Index (zero based) must be greater than or equal to zero and less than the size of the argument list." while using string interpolation. I've posted the code below (I'm using Visual C# 2008 express edition). The code is for a simple program I created for practice with variables, strings, and the console class. If someone could please explain to me what the problem is and how I can fix it, I'd be grateful. Also, if any of you have any tips or resources for a completely new programmer like me, that would be appreciated as well. Thank you!
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Console_Quote_Application
{
class Program
{
static void Main(string[] args)
{
string Quote;
string Author;
Console.Write("Please enter your favorite quote without quotes around it: ");
Quote = Console.ReadLine();
Console.Write("Now please enter the name of the person responsible for the quote: ");
Author = Console.ReadLine();
Console.Write("{1} once said "", Author);
Console.Write("{0}"", Quote);
Console.ReadLine();
}
}
}
Comments
[code]
Console.Write("{1} once said "", Author);
[/code]
you are doing something called a string format. Everywhere you have a number inside of {} one of the arguments after the initial string will be inserted.
The number inside the brackets refers to the arguments that follow the string. The index referencing is what is called "Zero Based" which means that the first argument is actually at index 0, the second argument is at index 1, third is at index 2, and so on...
In your statement you are asking to have the second argument inserted into your string "{1}", but you are only providing one argument. If you change this to {0} then it will use the first argument that you provide.
So just so I get this straight I have to number according to when I introduce the strings into the Console.WriteLine, and not according to in what order I wrote, "string Quote" and "string Author"?
So let's say you were writing the Console.WriteLine method it would look something resembling this...
[code]
public static void WriteLine(string format, params object[] args)
{
// the "params" keyword allows all parameters to be inserted
// into an array. This allows a variable number of arguments
// to be handled by a single method definition.
// So here we have the args array that contains each of the items
// you want inserted into your console output.
// We are going to loop through each of the objects passed and replace
// its respective index reference in the format string.
for (int i = 0; i < args.Length; i++)
{
// This is what we will be replacing in the string - e.g. {0}, {1}, etc...
string indexRef = "{" + i.ToString() + "}";
// This is what we will be replacing it with...
string indexItem = args[i].ToString();
format = format.Replace(indexRef, indexItem);
}
// Great - now that all of the items in the "args" array have been
// inserted, we can print the finished string to the console...
WriteLine(format);
}
[/code]