为什么我得到“没有重载方法的添加需要1个参数”;将字典添加到字典列表时

本文关键字:字典 添加 参数 1个 列表 重载 方法 为什么 | 更新日期: 2023-09-27 18:15:57

很抱歉,如果这是基本的。我对c#有点陌生,但是为什么我不能在字典列表中添加一个字典呢?我查过的文档是这样写的:

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

为什么我得到“没有重载方法的添加需要1个参数”;将字典添加到字典列表时

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

你需要的是:

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

这将创建一个新的键/值对并将其添加到Dictionary中。编译器认为你试图添加一个名为"test"的元素和一个名为"的元素到字典;你不能这样做,因为那些添加操作需要一个值和一个键。

您正在为列表或数组使用集合初始化项。字典有键和值,所以它需要在大括号中包含一组参数:

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

用集合初始化器初始化字典

添加{}

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

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

OK。"词典列表"可能把这个问题复杂化了。只使用这一行就会得到相同的错误:

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);

顺便说一句,为什么你需要一个字典列表。虽然技术上是有效的,但听起来还是一个编译的设计模式。

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

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

如果用多个项目初始化一个对象,那么它将是:

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

希望有帮助!