Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除列表框项目将保留它';s索引号?_C#_.net_Winforms - Fatal编程技术网

C# 删除列表框项目将保留它';s索引号?

C# 删除列表框项目将保留它';s索引号?,c#,.net,winforms,C#,.net,Winforms,所以我有一个列表框,我用 hi - 0 hello - 1 abc - 2 dog - 3 cat - 4 bear - 5 (#代表其索引值)如果我要删除条目cat-4,它的索引值将为4还是仍保持在索引值5?否,上述元素将不会保留其旧索引-它们将向下移动。这是因为它们存储为链表(list),因此列表中的任何间隙实际上都会断开链,超过“间隙”的任何元素都将无法访问 链表的工作原理是让每个元素存储对下一个元素的内存位置的引用(如果熟悉C++,请考虑指针)。因此,如果删除一个元素。对象必须通过将移

所以我有一个列表框,我用

hi - 0
hello - 1
abc - 2
dog - 3
cat - 4
bear - 5

(#代表其索引值)如果我要删除条目cat-4,它的索引值将为4还是仍保持在索引值5?

否,上述元素将不会保留其旧索引-它们将向下移动。这是因为它们存储为链表(
list
),因此列表中的任何间隙实际上都会断开链,超过“间隙”的任何元素都将无法访问

链表的工作原理是让每个元素存储对下一个元素的内存位置的引用(如果熟悉C++,请考虑指针)。因此,如果删除一个元素。对象必须通过将移除后的元素与移除前的元素重新链接来“修复”列表。如前所述,如果链接未固定,则移除元素之外的元素将无法访问(固定链接意味着元素向下移动)

例如,假设我有一个
列表
字符串
,在以下索引位置有以下元素:

0 - "Bob" 
1 - "Joe"
2 - "Bill"
这样做的方式是Bob会引用Joe,Joe会引用Bill。因此,当您访问索引时,将调用一个递归算法,从0(Bob)开始,并获取对下一个元素的引用。对于索引为2的索引,此过程重复两次(获取Bob的引用(Joe),然后获取该引用(Bill),这是您的索引2)。如果索引为0,则根本不会出现这种情况,因为0是起始元素,因此它只会返回该元素


最后一点与您的问题并不相关,但希望您学到了一些新的东西:)

如果您已经有了它,您可以尝试一下并检查结果。.列表框索引表示列表中的当前索引。如果删除项目,则删除项目后的所有索引都将更改。在您的示例中,如果删除除
dog
之外的所有项目,则只有一个项目的索引
0
。谢谢,是否有一种聪明的方法来保存索引值,以便我可以将此值用于其他用途?我能想到的唯一方法是运行一个循环来存储所有的索引值,然后删除项目。我想您可以在列表中添加一个空值作为占位符,例如,一个不会显示的空白字符串。这能满足您的需要吗?谢谢,是的,将值设置为null似乎很有用!我知道你建议OP测试他的问题,你是对的,但你认为你能在回答中解释这一点吗?另外-不要太迂腐,但我认为
var iem
旨在成为
var项目
;)<代码>列表不是“链接列表”。把它描述成这样只会让事情变得混乱。哦,我道歉——我还以为它是一个链表结构呢!谢谢你的澄清;你到底知道什么?From:“它通过使用一个数组来实现IList通用接口,该数组的大小根据需要动态增加。”
var listArray = yourListbox.items

foreach(var iem in listArray)
{
   Console.WriteLine(item.ToString());
}