我想List<MyObject> myList
引用词典myDic值...我试过
myList = myDic.Values.ToList()
但这似乎只复制字典值。我需要列表来引用字典,因此对myDic所做的任何修改(添加,删除,更新)都将反映在myList中。
答案 0 :(得分:5)
这实际上是不可能的。 myDic.Values
是IEnumerable<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
}
}