0

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

myList = myDic.Values.ToList() 

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

4

2 回答 2

5

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

考虑直接使用IEnumerable<MyObject>检索自myDic.Values- 是什么让您认为您需要一个List<MyObject>?

于 2012-06-13T21:53:46.773 回答
0

当然,您可以使用 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
    }
}
于 2012-06-13T22:01:29.940 回答