'对象'不包含'添加'的定义没有扩展方法'添加'接受类型'对象'的第一个参数。

时间:2017-05-04 10:26:15

标签: c#

当我尝试为现有密钥的字典(对象类型)添加值时,我收到以下错误,

预期结果:我希望字典同时具有值​​" 10"和"你好"对于密钥" A"

List<string> lst = new List<string>();
        lst.Add("A");
        lst.Add("A");

        var X = new Dictionary<string, object>();

        foreach (var a in lst)
        {
            if (X.Keys.Contains(a))
            {
                X[a].Add(10);
                //X[a] = 10;
            }
            else
            {
                X.Add(a, "hello");
            }
        }
  

&#39;对象&#39;不包含&#39;添加&#39;的定义没有延伸   方法&#39;添加&#39;接受类型&#39;对象&#39;的第一个参数。可能   发现(您是否缺少using指令或程序集引用?

有什么可以解决这个问题?

3 个答案:

答案 0 :(得分:2)

您必须更改Dictionary的类型,因为您需要一个值列表。

看起来像这样

var X = new Dictionary<string, List<object>>();

foreach (var a in lst)
{
    if (!X.Keys.Contains(a))
    {
         X[a].Add(10);
    }
    else
    {
        X.Add(a, new List<object>());
        X[a].Add("hello");
    }
}

答案 1 :(得分:2)

也许您希望X成为其值为列出对象的字典?然后:

  List<string> lst = new List<string>();
  lst.Add("A");
  lst.Add("A");

  var X = new Dictionary<string, List<object>>();  // note this type

  foreach (var a in lst)
  {
    List<object> li;
    if (X.TryGetValue(a, out li))
    {
      li.Add(10);
    }
    else
    {
      X.Add(a, new List<object>(1) { "hello", });
    }
  }

替代:

  foreach (var a in lst)
  {
    List<object> li;
    var oldKey = X.TryGetValue(a, out li);
    if (!oldKey)
    {
      li = new List<object>(1);
      X.Add(a, li);
    }

    li.Add(oldKey ? (object)10 : "hello");
  }

答案 2 :(得分:0)

如下所示分配

var X = new Dictionary<string, object>();

if (X.Keys.Contains("A"))
{
    X["A"] ="10";
}
else
{
    X.Add("A", "hello");
}