Cara yang tepat untuk menginisialisasi kamus C # dengan nilai?

514

Saya membuat kamus dalam file C # dengan kode berikut:

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

Ada garis merah di bawah newdengan kesalahan:

Fitur 'koleksi initilializer' tidak dapat digunakan karena ini bukan bagian dari spesifikasi bahasa ISO-2 C #

Adakah yang bisa menjelaskan apa yang terjadi di sini?

EDIT: oke, ternyata saya menggunakan .NET versi 2.

azrosen92
sumber
3
Ubah versi kerangka kerja yang ditargetkan atau gunakan cara inisialisasi "lama".
Sebastian Ðymel
Dalam konteks apa Anda menempatkan kode ini? Sebuah .csfile yang akan dikompilasi oleh Visual Studio, atau dalam .cshtml? Apakah file proyeklanguageVersion Anda memiliki elemen ?
CodeCaster

Jawaban:

827

Saya tidak dapat mereproduksi masalah ini dalam aplikasi konsol .NET 4.0 sederhana:

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

        Console.ReadKey();
    }
}

Bisakah Anda mencoba mereproduksi dalam aplikasi Konsol sederhana dan pergi dari sana? Tampaknya Anda menargetkan .NET 2.0 (yang tidak mendukungnya) atau kerangka kerja profil klien, daripada versi .NET yang mendukung sintaks inisialisasi.

Haney
sumber
12
Masalahnya adalah versi C # OP menggunakan, inisialisasi objek / koleksi tidak diperkenalkan sampai C # 3.0. Detail mengapa itu tidak berhasil sebelumnya sudah dijawab .
James
@James - Diedit untuk mengindikasikannya.
Haney
Bagaimana cara memeriksa versi C # apa yang saya gunakan atau ubah?
azrosen92
3
Properti proyek akan menunjukkan versi target kerangka kerja.
Haney
2
@James - Namun, tidak andal, karena orang ini mungkin mengambil pekerjaan lama dalam solusi yang menargetkan 2.0 dan tidak menyadarinya, misalnya.
Haney
198

Dengan C # 6.0, Anda dapat membuat kamus dengan cara berikut:

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

Ia bahkan bekerja dengan tipe kustom.

Vikram Kumar
sumber
8
Bagi orang-orang yang lebih tertarik dengan sintaks baru ini, berikut adalah posting blog yang bagus: marcin-chwedczuk.github.io/…
csharpfolk
1
Ini sempurna untuk deklarasi inline.
Tiramonium
1
Bagus - tidak tahu cara inisialisasi ini. Tampak agak seperti Python)) Terima kasih!
Mikhail T.
Saya suka cara Anda lebih baik, tetapi catat bahwa ia menggunakan jumlah karakter "boilerplate" yang sama persis (4) seperti jawaban yang diterima dengan {"key2", "value2"},
Maxter
35

Anda dapat menginisialisasi Dictionary(dan koleksi lainnya) sebaris. Setiap anggota berisi kawat gigi:

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

Lihat MSDN untuk detailnya.

Brendan
sumber
21

Misalkan kita memiliki kamus seperti ini

Dictionary<int,string> dict = new Dictionary<int, string>();
dict.Add(1, "Mohan");
dict.Add(2, "Kishor");
dict.Add(3, "Pankaj");
dict.Add(4, "Jeetu");

Kita dapat menginisialisasi sebagai berikut.

Dictionary<int, string> dict = new Dictionary<int, string>  
{
    { 1, "Mohan" },
    { 2, "Kishor" },
    { 3, "Pankaj" },
    { 4, "Jeetu" }
};
Debendra Dash
sumber
Jawaban ReSharper.
Antony Booth
10

Inisialisasi objek diperkenalkan di C # 3.0, periksa versi kerangka mana yang Anda targetkan.

Ikhtisar C # 3.0

Zbigniew
sumber
0

dengan c # 6.0

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

        Console.ReadKey();
    }
}
amesh
sumber
3
Ini sudah dijawab. Tidak menambahkan sesuatu yang baru.
nawfal