C# 如何使用列表<;T>;引用字典值?

C# 如何使用列表<;T>;引用字典值?,c#,C#,我想让列出myList参考字典myDic值…我已经试过了 myList = myDic.Values.ToList() 但这似乎只是复制字典中的值。我需要列表来引用词典,以便对myDic所做的任何修改(添加、删除、更新)都将反映在myList中。这实际上是不可能的myDic.Values是一个将枚举字典中的值的IEnumerable。通过对其调用.ToList(),您明确地请求制作副本。如果省略此调用,则可以使用一个可枚举项,但您当然无法直接对其进行索引或更改 考虑直接使用从myDic.Va

我想让
列出myList
参考字典myDic值…我已经试过了

myList = myDic.Values.ToList() 

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

这实际上是不可能的
myDic.Values
是一个将枚举字典中的值的
IEnumerable
。通过对其调用
.ToList()
,您明确地请求制作副本。如果省略此调用,则可以使用一个可枚举项,但您当然无法直接对其进行索引或更改


考虑直接使用从
myDic.Values
检索的
IEnumerable
——是什么让你认为你需要一个
列表
myDic.Values
是一个将枚举字典中的值的
IEnumerable
。通过对其调用
.ToList()
,您明确地请求制作副本。如果省略此调用,则可以使用一个可枚举项,但您当然无法直接对其进行索引或更改


考虑直接使用从
myDic.Values
检索到的
IEnumerable
——是什么让你认为你需要一个
列表
拥有两个世界的优点:

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

下面是一个可能不适合线程问题的简短示例:

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
    }
}
公共类DictRefList
{
私人词典;
private List;//这里是您的列表实现
公共无效目录列表()
{
dict=新字典();
列表=新列表;
}
公共void添加(int键,SomeRefClass val)
{ 
dict.Add(key,val);
列表。添加(val);
}
公共void Delete(int键,SomeRefClass val)
{
删除指令(键);
列表。删除(val);
}
公共void更新(int键,SomeRefClass val)
{
dict[key]=val;
list.Add(val);//执行必要的操作以使其保持有效且没有重复值
}
}

当然,您可以使用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
    }
}
公共类DictRefList
{
私人词典;
private List;//这里是您的列表实现
公共无效目录列表()
{
dict=新字典();
列表=新列表;
}
公共void添加(int键,SomeRefClass val)
{ 
dict.Add(key,val);
列表。添加(val);
}
公共void Delete(int键,SomeRefClass val)
{
删除指令(键);
列表。删除(val);
}
公共void更新(int键,SomeRefClass val)
{
dict[key]=val;
list.Add(val);//执行必要的操作以使其保持有效且没有重复值
}
}

您已经有了一个字典-如果您同时需要键和值,为什么要尝试将其转换为
列表
?因为该列表实际上是我编写的绑定到datagridview的异步bindinglist。由于查找速度的原因,我希望对字典执行数据修改,并将结果反映在绑定到我的网格的bindinglist中您已经有了字典-如果您同时需要键和值,为什么要尝试将其转换为
列表
?因为该列表实际上是我编写的绑定到datagridview的异步bindinglist。由于查找速度的原因,我希望对字典执行数据修改,并将结果反映在绑定到网格的bindinglist中,因为该列表实际上是我编写的绑定到datagridview的异步bindinglist。由于查找速度的原因,我希望对字典执行数据修改,并将结果反映在绑定到gridWell的bindinglist中,
bindinglist
在修改时发送一个事件,以便绑定到该列表的视图可以自我更新<代码>字典
没有任何此类事件。为了让它按你想要的方式工作,您可能需要编写自己的
BindingDictionary
类,该类将存储委托给
Dictionary
,并在发生更改时引发相应的事件。当我必须遍历列表以找到要修改或移除的项时,我的性能受到了很大的影响。而编写自己的bindinable类可能会受到影响正确…我知道绑定列表会发出通知,但是前端的用户也在修改网格,这样做需要知道绑定列表中项目的位置,我必须搜索列表来定位项目,有时候列表中有1000个项目,因为列表实际上是一个我编写的绑定到datagridview的异步绑定列表。由于查找速度的原因,我希望对字典执行数据修改,并将结果反映在绑定到gridWell的bindinglist中,
bindinglist
在修改时发送一个事件,以便绑定到该列表的视图可以自我更新<代码>字典
没有任何此类事件。为了让它以您想要的方式工作,您可能需要编写自己的
BindingDictionary
class th