为什么我得到“没有重载方法的添加需要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", "" });
当您在第二行创建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" }
};
希望有帮助!