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
ターゲットフレームワークのバージョンを変更するか、初期化の「古い」方法を使用します。
SebastianÐymel2013年

このコードをどのような状況で配置しますか?.csVisual Studioでコンパイルされるファイル、またはAで.cshtml?あなたのないプロジェクトファイルが持っているlanguageVersion要素を
CodeCaster 2013年

回答:


826

単純な.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(サポートしていない)またはクライアントプロファイルフレームワークをターゲットにしている可能性があります。


11
問題は、OPが使用しているC#のバージョンです。オブジェクト/コレクション初期化子は、C#3.0まで導入されていませんでした。以前に機能しなかった理由の詳細はすでに回答されています。
James

@James-そのように示すために編集されました。
ハニー

使用しているC#のバージョンを確認または変更するにはどうすればよいですか?
azrosen92 2013年

3
プロジェクトのプロパティは、フレームワークのターゲットバージョンを示します。
ハニー

2
@James-ただし、この人物は2.0を対象としていたソリューションでレガシー作業を拾っている可能性があり、たとえばそれを認識していないため、確実ではありません。
ハニー

198

C#6.0では、次の方法で辞書を作成できます。

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

カスタムタイプでも機能します。


8
この新しい構文でより興味がある人のためにここで良いブログ記事は次のとおりです。marcin-chwedczuk.github.io/...
csharpfolk

1
これはインライン宣言に最適です。
Tiramonium 2017

1
ニース-このイニシャル方法を知りませんでした。Pythonのように見えます))ありがとうございます!
ミハイルT.17年

私はあなたのやり方が好きですが、{"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();
    }
}

3
これはすでに答えられています。新しいものは何も追加していません。
naffal
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.