簡體   English   中英

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

[英]Proper way to initialize a C# dictionary with values

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

我無法在簡單的 .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# 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" }
};

C# 3.0 中引入了對象初始值設定項。 檢查您的目標框架版本。

C# 3.0 概述

使用С# 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 }
    };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM