正确的方法来初始化一个C#字典的值已经在它?

我正在用下面的代码在C#文件中创build一个字典:

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

new的下面有一个红线,错误:

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

任何人都可以解释这里发生了什么?

编辑:好的,所以事实certificate,我使用.NET版本2。

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

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

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

使用C#6.0,您可以按以下方式创build一个字典:

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

它甚至适用于自定义types。

您可以初始化一个字典(和其他集合)内联。 每个成员都带有大括号:

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

有关详细信息,请参阅MSDN ( https://msdn.microsoft.com/zh-cn/library/bb531208.aspx

对象初始化器是在C#3.0中引入的,请检查您的目标是哪个框架版本。

C#3.0概述

假设我们有这样一本字典 –

 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" } };