Değerlerle bir C # sözlüğü başlatmak için doğru yolu?


513

Aşağıdaki kod ile bir C # dosyasında bir sözlük oluşturuyorum:

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

newHatanın altında kırmızı bir çizgi var :

'Collection initilializer' özelliği, ISO-2 C # dil belirtiminin bir parçası olmadığından kullanılamaz

Burada neler olduğunu açıklayan var mı?

EDIT: Tamam, bu yüzden .NET sürüm 2 kullandığım çıkıyor.


3
Hedeflenen çerçeve sürümünü değiştirin veya "eski" başlatma yöntemini kullanın.
— Sebastian melymel

Bu kodu hangi bağlamda yerleştiriyorsunuz? Bir .csVisual Studio tarafından derlenen veya içinde alır dosya .cshtml? Senin mu proje dosyası var languageVersioneleman ?
— CodeCaster

Yanıtlar:


826

Bu sorunu basit bir .NET 4.0 konsol uygulamasında yeniden oluşturamıyorum:

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

        Console.ReadKey();
    }
}

Basit bir Konsol uygulamasında çoğaltmayı deneyebilir ve oradan gidebilir misiniz? Başlatma sözdizimini destekleyen bir .NET sürümü yerine .NET 2.0'ı (desteklemeyen) veya istemci profili çerçevesini hedeflediğiniz anlaşılıyor.


11
Sorun OP'nin kullandığı C # sürümü, nesne / koleksiyon başlatıcıları C # 3.0'a kadar tanıtılmadı. Neden daha önce işe yaramadığına dair ayrıntı zaten cevaplandı .
— James

@James - Böyle belirtmek için düzenlenmiştir.
— Haney

Hangi C # sürümünü kullandığımı nasıl kontrol edebilirim veya değiştirebilirim?
— azrosen92

3
Projenin özellikleri çerçevenin hedef sürümünü gösterecektir.
— Haney

2
@James - Bununla birlikte, güvenilir bir şekilde değil, çünkü bu kişi 2.0'ı hedefleyen ve bunun farkında olmayan bir çözümde bazı eski işleri alıyor olabilir.
— Haney

198

C # 6.0 ile sözlükleri şu şekilde oluşturabilirsiniz:

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

Özel türlerle bile çalışır.


8
Bu yeni sözdizimiyle daha fazla ilgilenen insanlar için iyi bir blog yazısı: marcin-chwedczuk.github.io/…
— csharpfolk

1
Bu, satır içi bildirim için mükemmeldir.
— Tiramonium

1
Güzel - bu şekilde başlangıç ​​yapmayı bilmiyordum. Python'a benziyor)) Teşekkürler!
— Mikhail T.

Daha yolunuzu seviyorum, ancak {"key2", "value2"},
— Maxter

35

DictionarySatır içi (ve diğer koleksiyonlar) başlatabilirsiniz . Her üye parantez içerir:

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

Ayrıntılar için MSDN'ye bakın.


21

Diyelim ki böyle bir sözlüğümüz var

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

Aşağıdaki gibi başlatabiliriz.

Dictionary<int, string> dict = new Dictionary<int, string>  
{
    { 1, "Mohan" },
    { 2, "Kishor" },
    { 3, "Pankaj" },
    { 4, "Jeetu" }
};

ReSharper cevabı.
— Antony Booth


0

c # 6.0 ile

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

        Console.ReadKey();
    }
}

2
Bu zaten cevaplandı. Yeni bir şey eklememek.
— nawfal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.