Są to bieżące metody deklaracji i inicjalizacji prostej tablicy.
string[] array = new string[2]; // creates array of length 2, default values
string[] array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
string[] array = new[] { "A", "B" }; // created populated array of length 2
Zauważ, że istnieją inne techniki uzyskiwania tablic, takie jak ToArray()
rozszerzenia Linq na IEnumerable<T>
.
Zauważ również, że w powyższych deklaracjach pierwsze dwa mogą zastąpić string[]
lewe z var
(C # 3+), ponieważ informacje z prawej strony są wystarczające, aby wywnioskować właściwy typ. Trzeci wiersz musi być zapisany jako wyświetlony, ponieważ sama składnia inicjalizacji tablicy nie wystarcza, aby spełnić wymagania kompilatora. Czwarty mógłby również użyć wnioskowania. Więc jeśli interesuje Cię cała zwięzłość, powyższe można zapisać jako
var array = new string[2]; // creates array of length 2, default values
var array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
var array = new[] { "A", "B" }; // created populated array of length 2
var
zmiennej?var x = {}
to nie działa, jeśli inicjator tablic mógłby dać cokolwiek innego niż tablice, ale nie wiedziałbym, co to jest. Sądzę więc, że inicjalizator tablicy jest funkcją języka. Jeśli użyjesz go razem znew List<string> {"A", "B"}
nim, otrzymasz również coś innego.Składnie tworzenia tablic w języku C #, które są wyrażeniami, to:
W pierwszym przypadku rozmiar może być dowolną nieujemną wartością całkowitą, a elementy tablicy są inicjowane do wartości domyślnych.
W drugim rozmiar musi być stały, a liczba podanych elementów musi być zgodna. Musi nastąpić niejawna konwersja z podanych elementów na podany typ elementu tablicy.
W trzecim z nich elementy muszą być domyślnie konwertowane na typ elementu, a rozmiar określa się na podstawie podanej liczby elementów.
W czwartym typ elementu tablicy jest wyprowadzany na podstawie obliczenia najlepszego typu, jeśli taki istnieje, ze wszystkich podanych elementów, które mają typy. Wszystkie elementy muszą być domyślnie konwertowalne na ten typ. Rozmiar określa się na podstawie liczby podanych elementów. Ta składnia została wprowadzona w C # 3.0.
Istnieje również składnia, której można używać tylko w deklaracji:
Elementy muszą być domyślnie konwertowane na typ elementu. Rozmiar określa się na podstawie liczby podanych elementów.
Odsyłam do specyfikacji C # 4.0, sekcja 7.6.10.4 „Wyrażenia tworzenia macierzy”.
źródło
Array.CreateInstance(typeof(int), 3)
!"1,2,3,4".split(',')
.new int[,] { { 3, 7 }, { 103, 107 }, { 10003, 10007 }, };
, i tak dalejint[,,]
,int[,,,]
...Niepuste tablice
var data0 = new int[3]
var data1 = new int[3] { 1, 2, 3 }
var data2 = new int[] { 1, 2, 3 }
var data3 = new[] { 1, 2, 3 }
var data4 = { 1, 2, 3 }
nie jest kompatybilny. Użyjint[] data5 = { 1, 2, 3 }
zamiast tego.Puste tablice
var data6 = new int[0]
var data7 = new int[] { }
var data8 = new [] { }
iint[] data9 = new [] { }
nie są kompatybilne.var data10 = { }
nie jest kompatybilny. Użyjint[] data11 = { }
zamiast tego.Jako argument metody
Tylko wyrażenia, które można przypisać za pomocą
var
słowa kluczowego, można przekazywać jako argumenty.Foo(new int[2])
Foo(new int[2] { 1, 2 })
Foo(new int[] { 1, 2 })
Foo(new[] { 1, 2 })
Foo({ 1, 2 })
nie jest kompatybilnyFoo(new int[0])
Foo(new int[] { })
Foo({})
nie jest kompatybilnyźródło
Utworzy tablicę pustych ciągów powtórzonych „zliczeń” razy. W przypadku, gdy chcesz zainicjować tablicę z tą samą, ale specjalną wartością domyślną elementu. Ostrożnie z typami referencji, wszystkie elementy będą odnosić się do tego samego obiektu.
źródło
var arr1 = Enumerable.Repeat(new object(), 10).ToArray();
otrzymasz 10 referencji do tego samego obiektu. Aby utworzyć 10 różnych obiektów, możesz użyćvar arr2 = Enumerable.Repeat(/* dummy: */ false, 10).Select(x => new object()).ToArray();
lub podobnego.źródło
Jeśli chcesz zainicjować stałą tablicę wstępnie zainicjalizowanych równych (
null
innych niżdefault
) elementów, użyj tego:Proszę również wziąć udział w tej dyskusji.
źródło
Przykład tworzenia tablicy niestandardowej klasy
Poniżej znajduje się definicja klasy.
Oto jak zainicjować tablicę:
źródło
Powtórz bez LINQ :
źródło
lub
lub
oraz w układzie wielowymiarowym
źródło
źródło
Kolejny sposób tworzenia i inicjowania tablicy obiektów. Jest to podobne do przykładu opublikowanego powyżej przez @Amol , z tym wyjątkiem, że ten używa konstruktorów. Zaskoczyła go odrobina polimorfizmu, nie mogłem się oprzeć.
Klasy kontekstu:
źródło
Dla klasy poniżej:
możesz zainicjalizować tablicę powyższego obiektu jak poniżej.
Mam nadzieję że to pomoże.
źródło
Możesz także tworzyć tablice dynamiczne, tzn. Możesz najpierw zapytać użytkownika o rozmiar tablicy przed jej utworzeniem.
źródło
Trywialne rozwiązanie z wyrażeniami. Zauważ, że dzięki NewArrayInit możesz stworzyć tylko jednowymiarową tablicę.
źródło
Tylko uwaga
Następujące tablice:
Zostanie skompilowany do:
źródło