以列表作为值的C#字典,我可以直接在列表上操作吗?

时间:2016-02-23 21:17:28

标签: c# list dictionary

我对字典和列表有疑问,我创建了一个词典:

private Dictionary<int, List<int>> mainGraph = new Dictionary<int, List<int>>();

然后我想扩展现有密钥的列表,并且这样做没有问题:

public void addLinkToGraph(int oldKey,int newValue)
{
    List<int> dummyList = mainGraph[oldKey];
    dummyList .Add(newValue);
    mainGraph[oldKey] = dummyList;
}

但如果我尝试直接在字典列表上进行操作:

public void addLinkToGraph(int oldKey,int newValue)
{
    mainGraph[oldKey] = mainGraph[oldKey].Add(newValue);
}

它返回错误:

  

错误CS0029无法将类型'void'隐式转换为'System.Collections.Generic.List'

有人可以帮助我理解为什么以及如果冷杉解决方案是一个很好的方法吗?

6 个答案:

答案 0 :(得分:2)

只需直接在列表上进行操作而不返回任何内容:

public void addLinkToGraph(int oldKey,int newValue)
{
    mainGraph[oldKey].Add(newValue);
}

答案 1 :(得分:1)

只需使用mainGraph[oldKey].Add(newValue);

即可

答案 2 :(得分:0)

如果您只是使用键oldKey扩展字典中的列表,那么mainGraph[oldKey].Add(newValue);就可以完成。

答案 3 :(得分:0)

mainGraph[oldKey].Add(newValue);

- 这就够了,不需要将它分配给mainGraph [oldKey](你能期待什么)? 此调用不返回任何内容 - 这是向现有列表添加值的操作。您的错误表明您尝试将此操作转换为某个值。

您可以向现有列表添加值,此操作会修改此列表,但不会更改字典。

答案 4 :(得分:0)

您的方法存在问题

public void addLinkToGraph(int oldKey,int newValue)
{
    mainGraph[oldKey] = mainGraph[oldKey].Add(newValue);
}

mainGraph[oldKey].Add(newValue)的结果是void类型。将密钥oldKey设置为void的字典值不合理,因为字典的值必须是List<int>类型。尝试

public void addLinkToGraph(int oldKey,int newValue)
{
    mainGraph[oldKey].Add(newValue);
}

您可能还想考虑字典是否在您正在变异的索引处有一个键;如果不是,你最终会获得NullReferenceException,这不是很好。

答案 5 :(得分:-1)

在使用该List之前,必须先实例化它。正确的

List<int> dummyList = mainGraph[oldKey];

dummyList null ;请记住,您必须为词典中的每个键执行此操作。