如何使用列表来引用字典值?
我想有List<MyObject> myList
参考字典myDic值...我已经试过如何使用列表<T>来引用字典值?
myList = myDic.Values.ToList()
但这似乎只复制字典中的值。我需要列表来引用字典,所以对myDic所做的任何修改(添加,删除,更新)都会反映在myList中。
这是不可能的。 myDic.Values
是一个IEnumerable<MyObject>
,它将枚举字典中的值。通过在其上调用.ToList()
,您明确要求请求复制。如果你省略了这个调用,那么你将拥有一个你可以使用的枚举,但是当然你将无法直接编制索引或改变它。
考虑直接使用从myDic.Values
检索到的IEnumerable<MyObject>
而不是 - 是什么让你觉得你需要一个List<MyObject>
?
,因为列表实际上是一个我编写的绑定到datagridview的异步绑定列表。我想在字典上执行数据修改,因为查找速度快,结果反映在我的绑定列表中,绑定到我的网格 –
那么,'BindingList
当我不得不通过列表遍历列表找到修改或删除的项目 –
当然,你可以使用,而不是你的列表实现有两全其美的好东西 的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
}
}
感谢Mare!这是一个好主意!我只是一个入门级的开发人员,所以我仍然学习在盒子外面思考!我会给出一些想法,看看它的去向。看起来可能是我在找的东西。至少它可能会让我的上司离开我的我**一天的大声笑! –
欢迎您! ObservableDictionary是强大的。 –
我刚才看到,完整的实现可以在这里获得:http://blogs.microsoft.co.il/blogs/shimmy/archive/2010/12/26/observabledictionary-lt-tkey-tvalue-gt-c。aspx,如果你喜欢这个想法,随时可以upvote /接受它;) –
您已经词典 - 如果你需要两个键和值,为什么尝试将其转换为'List'? – Oded
,因为该列表实际上是一个我编写的绑定到datagridview的异步绑定列表。我希望在字典上执行数据修改是因为查找速度,并将结果反映在我的绑定列表中,绑定列表绑定到我的网格 –