我正在尝试从组合框中检索一个值,并使用列表将其放入另一个组合框中。
我成功删除了列表中的值,并将其实现到其他列表中。但是当我这样做时,我的列表容量出现故障,并且我的索引超出了界限错误。
情景:
列出的信件选择:B
'左移按钮按下'
'B'已从信件列表中删除
'B'已添加到Numbers List
打印输出值
错误:“索引超出范围。必须是非负数且小于集合的大小
第66行:Console.WriteLine(“Numbers:”+ numbers [i] +“\ tIteration:”+ i);
号码列表容量:8,字母列表容量:4。
号码列表:1,2,3,4,B。字母列表:A,C,D
CODE:
public partial class Form1 : Form
{
public List<string> letters = new List<string>();
public List<string> numbers = new List<string>();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
InitialiseLists();
LoadListsIntoCombo();
}
public void InitialiseLists()
{
/*
* Add Letter Data
*/
letters.Add("A");
letters.Add("B");
letters.Add("C");
letters.Add("D");
/*
* Add Number Data
*/
numbers.Add("1");
numbers.Add("2");
numbers.Add("3");
numbers.Add("4");
}
public void LoadListsIntoCombo()
{
comboLetter.DataSource = letters;
comboNumber.DataSource = numbers;
}
public void PrintList()
{
/*
* Print Lists To Console
*/
for (int i = 0; i < numbers.Capacity; i++)
{
Console.WriteLine("NUM CAPACITY: " + numbers.Capacity);
Console.WriteLine("Numbers: " + numbers[i] + "\tIteration: " + i);
}
for (int i = 0; i < letters.Capacity; i++)
{
Console.WriteLine("LET CAPACITY: " + letters.Capacity);
Console.WriteLine("Letters : " + letters[i] + "\tIteration: " + i);
}
}
private void cmdLeft_Click(object sender, EventArgs e)
{
AddLetterToNumber(GetLetter());
RemoveLetter(GetLetter());
}
public void RemoveLetter(string value)
{
letters.Remove(value);
}
public void AddLetterToNumber(string value)
{
numbers.Add(value);
}
public string GetLetter()
{
string letter = comboLetter.SelectedItem.ToString();
return letter;
}
public int GetLetterIndex()
{
int letterIndex = comboLetter.SelectedIndex;
return letterIndex;
}
private void cmdRight_Click(object sender, EventArgs e)
{
PrintList();
}
}
}
非常感谢您提供的任何帮助。
答案 0 :(得分:5)
使用Count属性而不是Capacity
。因为第一个返回列表中包含的项目数。第二个只是说明在调整列表大小之前可以添加多少项目。
public void PrintList()
{
Console.WriteLine("Numbers count: " + numbers.Count);
for (int i = 0; i < numbers.Count; i++)
Console.WriteLine("Numbers: {0}\tIteration: {1}", numbers[i], i);
Console.WriteLine("Letters count: " + letters.Count);
for (int i = 0; i < letters.Count; i++)
Console.WriteLine("Letters : {0}\tIteration: {1}", letters[i], i);
}
答案 1 :(得分:1)
您正在使用Capacity而不是Count。容量不是列表中元素的数量。
Capacity: Gets or sets the total number of elements the internal data structure can hold without resizing.
Count: Gets the number of elements actually contained in the List<T>.