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

Proper way to initialize a C# dictionary with values?

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

1
2
3
4
5
6
private readonly Dictionary<string, XlFileFormat> FILE_TYPE_DICT
        = new Dictionary<string, XlFileFormat>
        {
            {"csv", XlFileFormat.xlCSV},
            {"html", XlFileFormat.xlHtml}
        };

new下有一条红线,错误为:

Feature 'collection initilializer' cannot be used because it is not part of the ISO-2 C# language specification

有人能解释一下这是怎么回事吗?

编辑:好吧,原来我用的是.NET版本2。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
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 6.0,您可以通过以下方式创建字典:

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

它甚至可以与自定义类型一起使用。


您可以以内联方式初始化Dictionary(和其他集合)。每个构件都包含有大括号:

1
2
3
4
5
6
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。


假设我们有这样的字典

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

我们可以如下初始化它。

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

对象初始值设定项是在C 3.0中引入的,请检查要针对的框架版本。

C 3.0概述