web-dev-qa-db-ja.com

値でC#辞書を初期化するための適切な方法は?

次のコードでC#ファイルに辞書を作成しています。

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

エラーが発生したnewの下に赤い線があります。

機能 'collection initilializer'はISO-2 C#言語仕様の一部ではないため使用できません

誰がここで何が起こっているのか説明できますか?

編集: 大丈夫、.NETバージョン2を使用していたことがわかります。

388
azrosen92

この問題を単純な.NET 4.0コンソールアプリケーションで再現することはできません。

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

        Console.ReadKey();
    }
}

簡単なコンソールアプリケーションで再現して、そこから移動することはできますか?初期化構文をサポートする.NETのバージョンではなく、.NET 2.0(これをサポートしていない)またはクライアントプロファイルフレームワークをターゲットにしているようです。

643
Haney

C#6.0では、次のようにして辞書を作成できます。

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

カスタムタイプでも動作します。

168
Vikram Kumar

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 _ を参照してください。

31
Brendan

このような辞書があるとします。

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" }
};
13
Debendra Dash

オブジェクト初期化子はC#3.0で導入されました。どのフレームワークバージョンをターゲットにしているか確認してください。

C#3.0の概要

8
Zbigniew