我正在尝试定义一个变量,如下所示:
Dictionary<string, List<string>> dicData = new Dictionary<string, List<string>>().Add("some key",new List<string> {"some string"});
并收到以下错误:
无法实现将void类型转换为type System.Collection.Generic.Dictionary&GT;
有人可以帮助我理解如何使用内联数据定义字典变量的语法。
为什么这个语法编译?
List<string> lst = new List<string>() { "some String" };
答案 0 :(得分:2)
你一次做两件事。表达式的右侧看起来像:
new Dictionary<string, List<string>>().Add("some key",new List<string> {"some string"});
您正在创建字典,并立即向其添加项目。 Add
返回void,因此您无法以这种方式捕获对字典的引用。您希望首先将字典分配给变量,然后添加到变量中。
甚至更好,您可以使用集合初始值设定项,就像您已使用List
var dicData = new Dictionary<string, List<string>>
{
["some key"] = new List<string> { "some string"}
};
上面的代码使用C#6语法
答案 1 :(得分:1)
您无法在同一语句中创建实例并执行void方法,并将结果分配给变量。您必须首先初始化变量,然后执行方法:
Dictionary<string, List<string>> dicData = new Dictionary<string, List<string>>();
dicData.Add("some key",new List<string> {"some string"}):
如果要在初始化时添加项目,可以执行此操作(在C#6,Visual Studio 2015中):
Dictionary<string, List<string>> dicData = new Dictionary<string, List<string>>
{
{
"some key",new List<string> {"some string"}
},
{
"some other key",new List<string> {"some other string"}
}
};
答案 2 :(得分:1)
您有语法错误,在c#6中,您可以执行以下操作:
Dictionary<string, List<string>> dicData = new Dictionary<string, List<string>>()
{
{ "some key", new List<string>() { "some string" } }
};
OR:
Dictionary<string, List<string>> dicData = new Dictionary<string, List<string>>()
{
["some key"] = new List<string>() { "some string" },
["some key 2"] = new List<string>() { "some string 2" }
};