【问题标题】:C# dictionary with list as value, can I directly operate on the list?C#字典以列表为值,我可以直接对列表进行操作吗?
【发布时间】:2016-02-23 21:17:27
【问题描述】:

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

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”

有人可以帮我理解为什么以及如果第一个解决方案是这样做的好方法吗?

【问题讨论】:

  • .Add(newValue) 没有返回值,它是void
  • mainGraph[oldKey].Add(newValue); 应该可以解决问题。
  • 在您的第一个 sn-p 中,mainGraph[oldKey] = dummyList 是不必要的 - 无需将相同的列表重新分配给字典中的键,因为 List.Add() 添加到现有对象而不是而不是创建一个新的。

标签: c# list dictionary


【解决方案1】:

直接在列表上做,不返回任何东西:

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

【讨论】:

  • Tks 真的很简单,我应该坚持一下!
  • 嗯,有时我们需要另一只眼睛来帮助我们“寻找”错误,没关系:)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果您只是使用键 oldKey 扩展字典中已经存在的列表,那么 mainGraph[oldKey].Add(newValue); 会这样做。

    【讨论】:

      【解决方案4】:
      mainGraph[oldKey].Add(newValue);
      

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

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

      【讨论】:

        【解决方案5】:

        你的方法有问题

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

        mainGraph[oldKey].Add(newValue) 的结果是void 类型吗?将键 oldKey 处的字典值设置为 void 没有意义,因为字典的值必须是 List&lt;int&gt; 类型。试试

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

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

        【讨论】:

          【解决方案6】:

          在您可以使用该列表之前,您必须实例化它。正弦波

          List<int> dummyList = mainGraph[oldKey];
          

          dummyList 将为 null;请记住,您必须对 Dictionary 中的每个键都这样做。

          【讨论】:

          • 这如何回答这个问题? List&lt;int&gt; dummyList 可以通过为其分配现有列表 (mainGraph[oldKey]) 来实例化。
          猜你喜欢
          • 2022-12-03
          • 2023-01-30
          • 2019-06-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-18
          • 1970-01-01
          相关资源
          最近更新 更多