650

我正在使用以下代码在 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。

4

8 回答 8

1034

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

于 2013-06-11T15:15:28.403 回答
282

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

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

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

于 2015-02-10T14:58:55.440 回答
41

您可以内联初始化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# 编程指南)初始化字典

于 2015-03-11T22:38:40.547 回答
36

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

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" }
};
于 2017-05-16T15:01:50.890 回答
13

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

C# 3.0 概述

于 2013-06-11T15:15:52.750 回答
4

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

    private readonly Dictionary<string, XlFileFormat> FILE_TYPE_DICT = new ()
    {
        { "csv", XlFileFormat.xlCSV },
        { "html", XlFileFormat.xlHtml }
    };
于 2021-10-27T01:37:13.473 回答
0

使用 С# 6.0

var myDict = new Dictionary<string, string>
{
    ["Key1"] = "Value1",
    ["Key2"] = "Value2"
};
于 2020-02-17T10:51:01.450 回答
-2

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

于 2021-04-24T16:23:50.060 回答