为什么在将词典添加到词典列表时,我得到“无需重载的方法”

时间:2014-08-01 23:46:37

标签: c#

对不起,如果这是基本的话。我对C#有点新,但为什么我不能将词典添加到词典列表中呢?我查找的文档是这样的:

List<Dictionary<string, string>> data = new List<Dictionary<string, string>>();
data.Add(new Dictionary<string, string>() { "test", "" });

5 个答案:

答案 0 :(得分:13)

在第二行创建Dictionary<string, string>时,您没有正确初始化它。

你需要的是:

List<Dictionary<string, string>> data = new List<Dictionary<string, string>>();
data.Add(new Dictionary<string, string>() { {"test", ""} });

这会创建一个新的键/值对并将其添加到Dictionary中。编译器虽然你试图添加一个名为&#34; test&#34;一个叫做#34;&#34;到字典;您无法做到这一点,因为这些添加操作需要一个值和一个键。

答案 1 :(得分:5)

您正在使用集合初始值设定项来获取列表或数组。字典有键和值,因此需要在大括号中包含一组参数:

data.Add(
    new Dictionary<string, string>() 
    { 
        { "key1", "value1" },
        { "key2", "value2" },
        { "key3", "value3" } 
    }
);

Initialize a Dictionary with a Collection Initializer

答案 2 :(得分:3)

添加额外的{}

data.Add(new Dictionary<string, string>() { {"test", ""} });

如果没有额外的括号,您尝试添加两个单独的字符串"test""",而您想要添加键值对。

答案 3 :(得分:2)

行。 “词典列表”可能使问题复杂化。 您只需使用此行获得相同的错误:

var x = new Dictionary<string, string>() { "test", "" };

问题是以这种方式填充字典。 如果我的例子改为:

var x = new Dictionary<string, string>();
x.Add("test", "");

然后回到原来的例子,这将有效:

        List<Dictionary<string, string>> data = new List<Dictionary<string, string>>();
        var x = new Dictionary<string, string>();
        x.Add("test", "" );
        data.Add(x);
顺便说一句,你为什么需要一个词典列表。听起来很复杂的设计模式 - 虽然技术上有效。

答案 4 :(得分:1)

字典对象期待键和值,而您只传递键。初始化字典时,您需要执行以下操作:

var anObject = new Dictionary<string, string>{ {"key", "value"} };

如果使用多个项初始化anObject,那么它将是:

var anObject = new Dictionary<string, string> 
        {
            { "key1", "val1" },
            { "key2", "val2" } 
        };

希望有所帮助!