如何添加到 List 动态 id

分享于2022年07月17日 c# list 问答
【问题标题】:如何添加到 List 动态 id (int) 内的每个项目(字符串),这实际上是每个元素的位置?(How can I add to every item (string) inside of the List dynamic id (int) which is actually position of every element inside?)
【发布时间】:2022-07-09 02:38:37
【问题描述】:

我需要为 List<int, string> 内的每个元素添加一个 id/key。

我尝试了使用静态 id 的方法:

for (int i = 0; i < sen.Length; i++)
{
    mySentences.Add(new Values { ID = i, Sentence = sen[i] });
}

但是这种方法似乎存在一些问题。我想从列表中间删除例如项目,然后删除项目下的每个项目都应将其 id 更改为 (n - 1)。

那么我该如何申请这个动态id呢?

  • List<>类有一个内置的索引...那你为什么需要另一个呢?
  • @J.Salas 是的,我知道有没有办法将此索引值存储到列表中?
  • @PrasadTelkikar 如果可能的话,我更喜欢将索引存储为 id
  • 我可以建议您创建一个自定义集合类,它继承 List 并重载所有在列表中添加或删除元素的方法。如果您打算更改单个元素的 ID,那么我建议您让元素实现 INotifyPropertyChanged 并让集合订阅它并相应地更新。但是,您很快就会意识到这变得非常困难,因为您需要避免某些无限循环场景和其他特殊情况。因此,我建议您不要以集合中索引的 ID 为基础。它会产生一大堆问题。
  • @ThomasAngeland 感谢您的回答。我会试试的。

【解决方案1】:

您可以使用此方法在每次删除时重新索引您的列表。

public List ReindexAfterDelete(List sen) 
    {           
        for (int i = 1; i<= sen.Count; i++) { 
            sen[i-1].ID = i;
        }
        return sen;
    }