删除列表框项目会保留它的索引号吗?

时间:2015-10-21 03:20:34

标签: c# .net winforms

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

的值填充它
hi - 0
hello - 1
abc - 2
dog - 3
cat - 4
bear - 5

(#表示其索引值)如果我要删除条目cat - 4将承受索引值为4还是仍然保持索引值5?

2 个答案:

答案 0 :(得分:0)

不,上述元素不会保留旧索引 - 它们会随机播放。这是因为它们存储为链接列表(List<T>),因此列表中的任何间隙实际上都会破坏链条,并且任何超出“间隙”的元素都将无法访问。

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

例如,假设我的List<T> string 0 - "Bob" 1 - "Joe" 2 - "Bill" 在以下索引位置包含以下元素:

      <!-- Added Items Stage -->
      <div ng-repeat-start="item in items" ng-form="editItemForm" class="row">
        <div class="col">
          <input type="text" name="description" ng-model="item.description" placeholder="description" required>
        </div>
        <div class="col">
          <input type="number" name="quantity" pattern="\d*" ng-model="item.quantity" placeholder="quantity" required>
        </div>
        <div class="col">
          <input type="text" name="price" ng-model="item.price" placeholder="price" required>
        </div>
        <div class="col">
          <select name="taxType" ng-model="item.taxType" required>
            <option value="ZR">ZR</option>
            <option value="SR">SR</option>
          </select>
        </div>
        <div class="col col-20" ng-bind="(item.quantity&&item.price)?((item.quantity*item.price) | currency:''):'0.00'"></div>
        <div class="col col-10">
          <button type="button" class="button button-assertive button-clear icon ion-close-circled" ng-click="deleteItem(item)"></button>
        </div>
      </div>

      <hr ng-repeat-end>

这种方式的工作方式是Bob会引用Joe,而Joe会引用Bill。因此,当您访问索引时,将调用递归算法,从0开始(Bob)并获取对下一个元素的引用。对于索引为2,此过程重复两次(获取Bob的引用(Joe),然后获取该引用(Bill),这是您的索引2)。索引为0时根本不会发生,因为0是起始元素,所以它只会返回它。

最后一点与你的问题无关,但希望你学到了新的东西:)

答案 1 :(得分:-2)

var listArray = yourListbox.items

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