使用值初始化C#字典的正确方法

我正在使用以下代码在C#文件中创建字典:

private readonly Dictionary<string, XlFileFormat> FILE_TYPE_DICT
= new Dictionary<string, XlFileFormat>
{
{"csv", XlFileFormat.xlCSV},
{"html", XlFileFormat.xlHtml}
};

new下面有一条红线,错误如下:

不能使用功能“集合初始化器”,因为它不是ISO-2 C#语言规范的一部分

这到底是怎么回事?

我使用的是. NET版本2。

653596 次浏览

我无法在简单的. NET 4.0控制台应用程序中重现此问题:

static class Program
{
static void Main(string[] args)
{
var myDict = new Dictionary<string, string>
{
{ "key1", "value1" },
{ "key2", "value2" }
};


Console.ReadKey();
}
}

你能尝试在一个简单的控制台应用程序中复制它并从那里开始吗?看起来你的目标可能是. NET 2.0(不支持它)或客户端配置文件框架,而不是支持初始化语法的. NET版本。

C#3.0中引入了对象初始化器。检查您的目标框架版本。

概述C#3.0

使用C#6.0,您可以通过以下方式创建字典:

var dict = new Dictionary<string, int>
{
["one"] = 1,
["two"] = 2,
["three"] = 3
};

它甚至适用于自定义类型。

您可以初始化Dictionary(和其他集合)内联。每个成员都包含大括号:

Dictionary<int, StudentName> students = new Dictionary<int, StudentName>
{
{ 111, new StudentName { FirstName = "Sachin", LastName = "Karnik", ID = 211 } },
{ 112, new StudentName { FirstName = "Dina", LastName = "Salimzianova", ID = 317 } },
{ 113, new StudentName { FirstName = "Andy", LastName = "Ruth", ID = 198 } }
};

有关详细信息,请参阅如何使用集合初始化器初始化字典(C#编程指南)

假设我们有一本这样的字典:

Dictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1, "Mohan");
dict.Add(2, "Kishor");
dict.Add(3, "Pankaj");
dict.Add(4, "Jeetu");

我们可以如下初始化它。

Dictionary<int, string> dict = new Dictionary<int, string>
{
{ 1, "Mohan" },
{ 2, "Kishor" },
{ 3, "Pankaj" },
{ 4, "Jeetu" }
};

#6.0

var myDict = new Dictionary<string, string>
{
["Key1"] = "Value1",
["Key2"] = "Value2"
};

代码看起来不错。只需尝试将. NET框架更改为v2.0或更高版本。

请注意,C#9允许目标类型的新表达式,因此如果您的变量或类成员不是抽象类或接口类型重复,可以避免:

    private readonly Dictionary<string, XlFileFormat> FILE_TYPE_DICT = new ()
{
{ "csv", XlFileFormat.xlCSV },
{ "html", XlFileFormat.xlHtml }
};