Index Out of Range
-
Difficult to know without all the source code. However, from your description, seems that variable i in function AddText is out of range. You should check that i is positive and less than list1.Length. Something like this
//Function to add string dynamically in Class1 private List list1 = new List(); public void AddText(string myText) { if ((i < 0) || (i >= list1.Length)) { MessageBox.Show(String.Format("i is {0}. Should be between 0 and {1}", i, list1.Length)); return; } if((list1\[i\] == "") && (k < 1)) { k = i; list1\[i\] = myText; k++; } }
By the way, please mind the ampersand in line
if((list1\[i\] == "") && (k < 1)) {
Also, if you are looping, shouldn't there be a loop somewhere? I can't see it.
-
Hi all, I 'm trying to loop through a List to see which element in the List is empty, then add strings entered via a text box into the empty element. I tried to display the content of the List element to check what it contains. I Get the error "Index was out of range. Must be non-negative and less than the size of the collection". The following is my code: //Function to add string dynamically in Class1 private List list1 = new List(); public string AddText(string myText) { if(list1[i]=="" & k<1) { k = i; list1[i] = myText; k++; } return list1[i]; } //Calling AddText() function from Class2 private void btn8_Click(object sender, EventArgs e) { string myText = txtDisplay.Text; ExpressionEval k = new ExpressionEval(); string g = k.AddText(myText); txtDisplay.Text = g; } Please point out why I'm getting this error, thanks in advance.
Try debugging and stepping through your source code. It will help you figure out the exact line where you are getting this error. Further, based on this, you will be able to diagnose this error. Looks like the list1 list count is going wrong.
Build your own survey - http://www.factile.net
-
Hi, thanks for replying. I forgot to include a for loop in my code, so here it is. public void AddText(string myText) { for (int i = 0; i
-
Hi all, I 'm trying to loop through a List to see which element in the List is empty, then add strings entered via a text box into the empty element. I tried to display the content of the List element to check what it contains. I Get the error "Index was out of range. Must be non-negative and less than the size of the collection". The following is my code: //Function to add string dynamically in Class1 private List list1 = new List(); public string AddText(string myText) { if(list1[i]=="" & k<1) { k = i; list1[i] = myText; k++; } return list1[i]; } //Calling AddText() function from Class2 private void btn8_Click(object sender, EventArgs e) { string myText = txtDisplay.Text; ExpressionEval k = new ExpressionEval(); string g = k.AddText(myText); txtDisplay.Text = g; } Please point out why I'm getting this error, thanks in advance.
Try debugging and stepping through your source code. It will help you figure out the exact line where you are getting this error. Further, based on this, you will be able to diagnose this error.
Build your own survey - http://www.factile.net
-
Hi all, I 'm trying to loop through a List to see which element in the List is empty, then add strings entered via a text box into the empty element. I tried to display the content of the List element to check what it contains. I Get the error "Index was out of range. Must be non-negative and less than the size of the collection". The following is my code: //Function to add string dynamically in Class1 private List list1 = new List(); public string AddText(string myText) { if(list1[i]=="" & k<1) { k = i; list1[i] = myText; k++; } return list1[i]; } //Calling AddText() function from Class2 private void btn8_Click(object sender, EventArgs e) { string myText = txtDisplay.Text; ExpressionEval k = new ExpressionEval(); string g = k.AddText(myText); txtDisplay.Text = g; } Please point out why I'm getting this error, thanks in advance.
Pardon my ignorance, but I don't see where
k
gets initialized. It gets a little confusing, too, when you use letters for different things. In class 1, it's an integer; in class 2 it's something else.Will Rogers never met me.
-
Pardon my ignorance, but I don't see where
k
gets initialized. It gets a little confusing, too, when you use letters for different things. In class 1, it's an integer; in class 2 it's something else.Will Rogers never met me.
Good points. I,j,k are quite confusing.
Build your own survey - http://www.factile.net
-
Pardon my ignorance, but I don't see where
k
gets initialized. It gets a little confusing, too, when you use letters for different things. In class 1, it's an integer; in class 2 it's something else.Will Rogers never met me.
Hi, thank you all for responding. K is initialized outside of the function and I have modified my function as follows: class Class1 { private int k = 0; private List list1 = new List(); //Passing in myTemp as a string public string AddText(string myText) { int i = 0; do { //check to see if element is empty if (list1.Count == 0) { //Add the content of myText into list1 list1.Add(myText); i++; } } while (i < list1.Count); //Returns the content of the elements that were affected return list1[i]; } } I have stepped through the function and Visual Studio says the line, return list1[i];is the cause of the error message "Index was out of range". I don't know what else to do. If you can explain why I'm getting the error by looking at my code, please point it out. Thanks for your help.
-
Hi, thank you all for responding. K is initialized outside of the function and I have modified my function as follows: class Class1 { private int k = 0; private List list1 = new List(); //Passing in myTemp as a string public string AddText(string myText) { int i = 0; do { //check to see if element is empty if (list1.Count == 0) { //Add the content of myText into list1 list1.Add(myText); i++; } } while (i < list1.Count); //Returns the content of the elements that were affected return list1[i]; } } I have stepped through the function and Visual Studio says the line, return list1[i];is the cause of the error message "Index was out of range". I don't know what else to do. If you can explain why I'm getting the error by looking at my code, please point it out. Thanks for your help.
That's a good clue! Now, add
list1.Count
andi
to the Watch list and step through again, observing how each line of code affects them. I think you'll find that, when you hit thereturn
statement,i = list1.Count
. That will put it out of range, since the last element of list1 has an index of Count - 1. Just a guess... :)Will Rogers never met me.
-
Hi, thanks for replying. I forgot to include a for loop in my code, so here it is. public void AddText(string myText) { for (int i = 0; i
In this example I imaging that you would receive the index out of range at the return list1[k]; If you notice inside your for loop you assign k to the value of i then assign the value to the list, then you increment k by one value. this could work if you change the return list1[k] to return list1[k-1] (however you would also want to add some extra code to verify "k" is still within the index range of the list.
-
Hi, thank you all for responding. K is initialized outside of the function and I have modified my function as follows: class Class1 { private int k = 0; private List list1 = new List(); //Passing in myTemp as a string public string AddText(string myText) { int i = 0; do { //check to see if element is empty if (list1.Count == 0) { //Add the content of myText into list1 list1.Add(myText); i++; } } while (i < list1.Count); //Returns the content of the elements that were affected return list1[i]; } } I have stepped through the function and Visual Studio says the line, return list1[i];is the cause of the error message "Index was out of range". I don't know what else to do. If you can explain why I'm getting the error by looking at my code, please point it out. Thanks for your help.
The reason this code would throw an out of range exception is if the code executes within this section
if (list1.Count == 0) { //Add the content of myText into list1 list1.Add(myText); i++; }
now you have added an item to the list and the count is now 1. You then increment i from zero to 1. Now you are trying to return the first item in the collection (a zero based index collection) with the value of 1 when the value you should be requesting is 0 return list1[i-1] or list1[0] or list1[list1.Count - 1] etc. of course if your i value is 0 and you try list1[i-1] you will also receive an error because that would be the value -1 and that is out of range. Hope that helps if you haven't already figured this out.