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.


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.


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.


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.


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

Jawaban ReSharper.
Antony Booth


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

3
Ini sudah dijawab. Tidak menambahkan sesuatu yang baru.
nawfal
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.