如何使用 List 引用字典值

本文关键字:引用 字典 何使用 List | 更新日期: 2023-09-27 18:37:10

我想List<MyObject> myList参考字典myDic值...我试过了

myList = myDic.Values.ToList() 

但这似乎只复制字典值。我需要列表来引用字典,以便对myDic所做的任何修改(添加,删除,更新)都将反映在myList中。

如何使用 List<T> 引用字典值

这实际上是不可能的。 myDic.Values是一个IEnumerable<MyObject>,它将枚举字典中的值。 通过调用.ToList(),您明确要求制作副本。 如果省略此调用,那么您将拥有一个可以使用的枚举对象,但当然您将无法索引它或直接更改它。

考虑直接使用从myDic.Values检索到的IEnumerable<MyObject> - 是什么让你认为你需要一个List<MyObject>

当然,

您可以使用 ObservableDictionary 而不是列表实现拥有两个世界的好东西:可以在这里找到

如果你需要一个列表和一个字典,并且需要同步它们,而没有每次字典更改时都有一个新副本的缺点,你为什么不为此编写一个类呢?

这里有一个简短的例子,可能不适合线程问题:

public class DictRefList
{
    private Dictionary<int, SomeRefClass> dict;
    private List<SomeRefClass> list; // your list implementation here
    public void DictRefList()
    {
        dict = new Dictionary<int, SomeRefClass>();
        list = new List<SomeRefClass>;
    }
    public void Add(int key, SomeRefClass val)
    { 
        dict.Add(key, val);
        list.Add(val);
    }
    public void Delete(int key, SomeRefClass val)
    {
        dict.Remove(key);
        list.Remove(val);
    }
    public void Update(int key, SomeRefClass val)
    {
        dict[key] = val;
        list.Add(val); // do what is necessary to keep it valid and have no duplicate value
    }
}