Quelles sont toutes les syntaxes d'initialisation de tableau possibles avec C #?
la source
Quelles sont toutes les syntaxes d'initialisation de tableau possibles avec C #?
Ce sont les méthodes actuelles de déclaration et d'initialisation pour un tableau simple.
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
Notez qu'il existe d'autres techniques d'obtention de tableaux, telles que les ToArray()
extensions Linq sur IEnumerable<T>
.
Notez également que dans les déclarations ci-dessus, les deux premiers pourraient remplacer le string[]
sur la gauche par var
(C # 3+), car les informations sur la droite sont suffisantes pour déduire le type approprié. La troisième ligne doit être écrite telle qu'elle est affichée, car la syntaxe d'initialisation du tableau ne suffit pas à elle seule pour satisfaire les demandes du compilateur. Le quatrième pourrait également utiliser l'inférence. Donc, si vous êtes dans la brièveté, ce qui précède pourrait être écrit comme
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
variable?var x = {}
cela ne fonctionne pas si l'initialiseur de tableau pouvait produire autre chose que des tableaux, mais je ne saurais pas ce que c'est. Je suppose donc que l'initialiseur de tableau est une fonctionnalité de langue. Si vous l'utilisez avec,new List<string> {"A", "B"}
cela donne quelque chose de différent aussi.Les syntaxes de création de tableau en C # qui sont des expressions sont:
Dans le premier, la taille peut être n'importe quelle valeur intégrale non négative et les éléments du tableau sont initialisés aux valeurs par défaut.
Dans le second, la taille doit être constante et le nombre d'éléments donné doit correspondre. Il doit y avoir une conversion implicite des éléments donnés vers le type d'élément de tableau donné.
Dans le troisième, les éléments doivent être implicitement convertibles en type d'élément, et la taille est déterminée à partir du nombre d'éléments donné.
Dans le quatrième, le type de l'élément de tableau est déduit en calculant le meilleur type, s'il y en a un, de tous les éléments donnés qui ont des types. Tous les éléments doivent être implicitement convertibles en ce type. La taille est déterminée à partir du nombre d'éléments donnés. Cette syntaxe a été introduite dans C # 3.0.
Il existe également une syntaxe qui ne peut être utilisée que dans une déclaration:
Les éléments doivent être implicitement convertibles en type d'élément. La taille est déterminée à partir du nombre d'éléments donnés.
Je vous renvoie à la spécification C # 4.0, section 7.6.10.4 "Expressions de création de tableaux".
la source
Array.CreateInstance(typeof(int), 3)
!"1,2,3,4".split(',')
.new int[,] { { 3, 7 }, { 103, 107 }, { 10003, 10007 }, };
, et ainsi de suite pourint[,,]
,int[,,,]
...Tableaux non vides
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 }
n'est pas compilable. Utilisezint[] data5 = { 1, 2, 3 }
plutôt.Tableaux vides
var data6 = new int[0]
var data7 = new int[] { }
var data8 = new [] { }
etint[] data9 = new [] { }
ne sont pas compilables.var data10 = { }
n'est pas compilable. Utilisezint[] data11 = { }
plutôt.Comme argument d'une méthode
Seules les expressions qui peuvent être affectées avec le
var
mot - clé peuvent être passées comme arguments.Foo(new int[2])
Foo(new int[2] { 1, 2 })
Foo(new int[] { 1, 2 })
Foo(new[] { 1, 2 })
Foo({ 1, 2 })
n'est pas compilableFoo(new int[0])
Foo(new int[] { })
Foo({})
n'est pas compilablela source
Créera un tableau de chaînes vides répétées 'count' fois. Dans le cas où vous souhaitez initialiser le tableau avec la même valeur d'élément par défaut, mais spéciale. Attention aux types de référence, tous les éléments feront référence au même objet.
la source
var arr1 = Enumerable.Repeat(new object(), 10).ToArray();
vous obtenez 10 références au même objet. Pour créer 10 objets distincts, vous pouvez utiliservar arr2 = Enumerable.Repeat(/* dummy: */ false, 10).Select(x => new object()).ToArray();
ou similaire.la source
Dans le cas où vous souhaitez initialiser un tableau fixe d'éléments égaux (non
null
ou autres quedefault
) pré-initialisés , utilisez ceci:Veuillez également prendre part à cette discussion.
la source
Exemple pour créer un tableau d'une classe personnalisée
Voici la définition de classe.
Voici comment initialiser le tableau:
la source
Répétez sans LINQ :
la source
ou
ou
et dans un tableau multidimensionnel
la source
la source
Une autre façon de créer et d'initialiser un tableau d'objets. Ceci est similaire à l' exemple que @Amol a publié ci - dessus , sauf que celui-ci utilise des constructeurs. Un soupçon de polymorphisme saupoudré, je n'ai pas pu résister.
Classes pour le contexte:
la source
Pour la classe ci-dessous:
vous pouvez initialiser le tableau des objets ci-dessus comme ci-dessous.
J'espère que cela t'aides.
la source
Vous pouvez également créer des tableaux dynamiques, c'est-à-dire que vous pouvez d'abord demander la taille du tableau à l'utilisateur avant de le créer.
la source
Solution triviale avec des expressions. Notez qu'avec NewArrayInit, vous pouvez créer uniquement un tableau unidimensionnel.
la source
Juste une note
Les tableaux suivants:
Sera compilé pour:
la source