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.