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


513

我正在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。


3
更改目标框架版本或使用“旧的”初始化方式。
塞巴斯蒂安·伊梅尔2013年

您在什么情况下放置此代码?一个.cs是被由Visual Studio编译或在一个文件.cshtml?您的项目文件中是否包含languageVersion元素
CodeCaster 2013年

Answers:


825

我无法在简单的.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版本。


11
问题是OP使用的C#版本,直到C#3.0才引入对象/集合初始化程序。关于为什么以前无效的细节已经得到解答
詹姆斯

@James-进行了编辑以指示其本身。
Haney

如何检查我正在使用或更改的C#版本?
azrosen92 2013年

3
项目的属性将指示框架的目标版本。
Haney

2
@James-但是不可靠,例如,此人可能正在针对2.0且不知道的解决方案中进行一些遗留工作。
Haney

196

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

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

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


8
对于对此新语法更感兴趣的人,这里是不错的博客文章:marcin-chwedczuk.github.io/…–
csharpfolk

1
这对于内联声明是完美的。
Tiramonium

1
很好-不知道这种初始化方式。看起来有点像Python))谢谢!
Mikhail T.

我更喜欢您的方式,但是请注意,它每行(4)使用与“ {key2”,“ value2”}},
Maxter

35

您可以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 } }
};

有关详细信息,请参见MSDN


21

假设我们有一个这样的字典

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

ReSharper的答案。
安东尼·布斯


0

使用C#6.0

static class Program
{
    static void Main(string[] args)
    {
        var myDict = new Dictionary<string, string>
        {
           ["Key1"]="Value1",
           ["Key2"]="Value2"
        };

        Console.ReadKey();
    }
}

2
已经回答了。没有添加任何新内容。
nawfal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.