2014-12-02 12 views
45

W niedawnej przeszłości nie było dużo gadania o co nowego w C# 6.0
Jednym z najbardziej mówił o funkcji korzysta Dictionary inicjatorów w C# 6.0
Ale czekaj używamy inicjatorów zbiórki zainicjować zbiorów i można bardzo dobrze zainicjować Dictionary także w .NET 4.0 i .NET 4.5 (nie wiem o starej wersji) jakJakie zalety inicjatory słownika dodają do inicjalizatorów kolekcji?

Dictionary<int, string> myDict = new Dictionary<int, string>() { 
    { 1,"Pankaj"}, 
    { 2,"Pankaj"}, 
    { 3,"Pankaj"} 
}; 

Więc co tam nowego w C# 6.0, Co słownik Initializer mówią w języku C# 6.0

+3

@DevEstacion Tytuł pytania można edytować na "Jaka jest różnica między inicjalizacją kolekcji a inicjatorem słownika" lub "Jakie korzyści inicjatory słownikowe dodają do inicjalizatorów kolekcji" w celu odróżnienia od "prostego pytania do sprawdzenia" – i3arnon

Odpowiedz

72

podczas mógłby zainicjować słownik z inicjalizatorów zbiórki, jest dość kłopotliwe. Zwłaszcza w przypadku czegoś, co powinno być cukrem syntaktycznym.

Słownik inicjalizatory są znacznie czystsze:

var myDict = new Dictionary<int, string> 
{ 
    [1] = "Pankaj", 
    [2] = "Pankaj", 
    [3] = "Pankaj" 
}; 

ważniejsze te inicjalizatory są nie tylko dla słowników, mogą być wykorzystywane do dowolnego obiektu wspieranie podziałowe, na przykład List<T>:

var array = new[] { 1, 2, 3 }; 
var list = new List<int>(array) { [1] = 5 }; 
foreach (var item in list) 
{ 
    Console.WriteLine(item); 
} 

Wyjście:

1 
5 
3 
+12

To nie to samo. Stara wersja wywołuje metodę "Add" (która może być teraz metodą rozszerzenia w C#), a nowa wywołuje indeksator. Wynik końcowy może być taki sam dla słowników, ale nowy może być używany dla typów, które mają indeksatory, ale nie dla metod "Dodaj". –

+0

@PauloMorgado Oczywiście. Nie sugerowałem inaczej. – i3arnon

+4

@ I3arnon, nie, nie. Kiedy przeczytałem pytanie i odpowiedź, pomyślałem, że może być źle rozumiane jako to samo. Właśnie wzmacniałem twoją odpowiedź. –

2

Nowość to crea ting słownik ten sposób

Dictionary<int, string> myDict = new Dictionary<int, string>() { 
    [1] = "Pankaj", 
    [2] = "Pankaj", 
    [3] = "Pankaj" 
}; 

ze stylem <index> = <value>

Przestarzałe: string indeksowane członkiem składnia (podano w komentarzach)

Dictionary<int, string> myDict = new Dictionary<int, string>() { 
     $1 = "Pankaj", 
     $2 = "Pankaj", 
     $3 = "Pankaj" 
    }; 

Zrobione z A C# 6.0 Language Preview

Aby zrozumieć $ operat lub, spójrz na wywołanie funkcji AreEqual. Zwróć uwagę na wywołanie elementu słownikowego "$ Boolean" w zmiennej builtInDataTypes - nawet jeśli w słowniku nie ma elementu "Boolean". Taki jawny członek nie jest wymagany, ponieważ operator $ wywołuje indeksowanego członka w słowniku, odpowiednik wywołania metody buildInDataTypes ["Boolean"].

+9

AFAIK $ operator nie istnieje już. – i3arnon

Powiązane problemy