2011-08-23 15 views
15

Jaki jest najtańszy/najkrótszy sposób mogę napisać inicjator kolekcji inline?Najkrótszy inicjator kolekcji inline? C#

Nie interesują mnie nazwy referencyjne, indeksy są w porządku, a przedmiot musi być używany tylko w zakresie metody.

Myślę, że kolekcja anonimowych typów byłaby bardziej nieprzyjemna, ponieważ musiałbym ciągle zapisywać kluczowe imię.

Ja obecnie mam

var foo = new Tuple<int, string, bool>[] 
{ 
    new Tuple<int, string, bool>(1, "x", true), 
    new Tuple<int, string, bool>(2, "y", false) 
}; 

Im nadzieję C# 4.0 będzie miał coś ive zmarnować.

+1

chcesz najkrótszy lub najmodniejszy? – Jodrell

+0

Jeśli jest dużo używany, możesz napisać własną klasę, która ma metodę "Dodaj (int, string, bool)", a następnie użyj inicjatora kolekcji, np. 'Var foo = new MyCollection {{1," x ", true}, {2, "y", false}}; ' – nawfal

Odpowiedz

17

Najkrótszy jesteś get jest użycie Tuple.Create zamiast new Tuple:

var foo = new [] { Tuple.Create(1, "x", true), Tuple.Create(2, "y", false) }; 
5

nieco mniej miejsca w środku, jeśli używasz Tuple.Create(1,"x",true) zamiast nowej rzeczy - i można pozbawić new Tuple<tint, string, bool> rzeczy przed tablicy zbyt:

var foo = new [] { Tuple.Create(1, "x", true), Tuple.Create(2, "y", false) }; 

lub wziąć ten jeden:

Func<int, string, bool, Tuple<int, string, bool>> T = (i, s, b) => Tuple.Create(i,s,b); 
var foo = new [] { T(1, "x", true), T(2, "y", false) }; 

lub nawet

Func<int, string, Tuple<int, string, bool>> T = (i, s) => Tuple.Create(i,s,true); 
Func<int, string, Tuple<int, string, bool>> F = (i, s) => Tuple.Create(i,s,false); 
var foo = new [] { T(1, "x"), F(2, "y") }; 
+1

btw markdown zapewnia o wiele prostszy sposób na formatowanie kodu * bloków * niż to, co robiłeś - wcinając po prostu każdą (nieodwzorowaną) linię cztery spacje! np. zobacz moją edycję – AakashM

+0

oh - dziękuję - wypróbował "przycisk", ale zatrzyma się na każdej pustej linii .... Myślę, że to może mnie w przyszłości przyspieszyć;) – Carsten

+1

@CKoenig: Wybierz cały kod, który chcesz sformatować a następnie naciśnij przycisk. To działa. –

0

Można również dodać

using MyTuple= System.Tuple<int, string, bool>; 

w końcu swoimi deklaracjami using a następnie użyć MyTuple zamiast dłuższej wersji.