如何使用List <t>引用Dictionary值?</t>

时间:2012-06-13 21:51:40

标签: c#

我想List<MyObject> myList引用词典myDic值...我试过

myList = myDic.Values.ToList() 

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

2 个答案:

答案 0 :(得分:5)

这实际上是不可能的。 myDic.ValuesIEnumerable<MyObject>,它将枚举字典中的值。通过调用.ToList(),您显式请求复制。如果省略此调用,那么您将拥有一个可以使用的枚举,但当然您将无法将其编入索引或直接更改它。

考虑直接使用从IEnumerable<MyObject>检索到的myDic.Values - 您认为自己需要List<MyObject>是什么?

答案 1 :(得分:0)

当然,您可以使用ObservableDictionary而不是列表实现 拥有两个世界的好东西:which can be found here

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

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

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
    }
}