Question Toutes les syntaxes d'initialisation de tableau possibles


Quelles sont toutes les syntaxes d'initialisation du tableau possibles avec C #?


492
2018-04-15 14:27


origine


Réponses:


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 Linq ToArray() extensions sur IEnumerable<T>.

Notez également que dans les déclarations ci-dessus, les deux premiers pourraient remplacer le string[] à gauche avec var (C # 3+), car l'information à droite suffit à en déduire le type approprié. La troisième ligne doit être écrite comme 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 concision, ce qui précède pourrait être écrit comme suit:

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 

493
2018-04-15 14:29



Les syntaxes de création de tableau en C # qui sont expressions sont:

new int[3]
new int[3] { 10, 20, 30 }
new int[] { 10, 20, 30 }
new[] { 10, 20, 30 }

Dans le premier cas, la taille peut être une valeur intégrale non négative et les éléments du tableau sont initialisés aux valeurs par défaut.

Dans la seconde, la taille doit être une constante et le nombre d'éléments donnés 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 convertibles implicitement en type d’élément et la taille est déterminée à partir du nombre d’éléments fournis.

Dans la quatrième, le type de l'élément 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 à ce type. La taille est déterminée à partir du nombre d'éléments donnés. Cette syntaxe a été introduite en C # 3.0.

Il existe également une syntaxe qui ne peut être utilisée que dans une déclaration:

int[] x = { 10, 20, 30 };

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.

il n'y a pas un guide tout-en-un

Je vous renvoie à la spécification C # 4.0, section 7.6.10.4 "Expressions de création de tableaux".


360
2018-04-15 14:41



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. Utilisation int[] data5 = { 1, 2, 3 } au lieu.

Tableaux vides

  • var data6 = new int[0]
  • var data7 = new int[] { }
  • var data8 = new [] { }  et int[] data9 = new [] { } ne sont pas compilables.

  • var data10 = { } n'est pas compilable. Utilisation int[] data11 = { }  au lieu.

Comme argument d'une méthode

Seules les expressions pouvant être affectées au var Le mot-clé peut être transmis en tant qu'argument.

  • 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 compilable
  • Foo(new int[0])
  • Foo(new int[] { })
  • Foo({}) n'est pas compilable

83
2017-08-14 18:21



Enumerable.Repeat(String.Empty, count).ToArray()

Va créer un tableau de chaînes vides répété 'fois'. Dans le cas où vous souhaitez initialiser le tableau avec la même valeur d'élément par défaut spéciale. Attention aux types de référence, tous les éléments feront référence au même objet.


34
2018-05-06 09:05



var contacts = new[]
{
    new 
    {
        Name = " Eugene Zabokritski",
        PhoneNumbers = new[] { "206-555-0108", "425-555-0001" }
    },
    new 
    {
        Name = " Hanying Feng",
        PhoneNumbers = new[] { "650-555-0199" }
    }
};

14
2017-08-29 11:31



Si vous souhaitez initialiser un tableau fixe d’égaux pré-initialisés (nonnull ou autre que default), utilisez ceci:

var array = Enumerable.Repeat(string.Empty, 37).ToArray();

Aussi s'il vous plaît prendre part à ce discussion.


11
2017-12-20 09:33



Exemple pour créer un tableau d'une classe personnalisée

Voici la définition de la classe.

public class DummyUser
{
    public string email { get; set; }
    public string language { get; set; }
}

Voici comment vous pouvez initialiser le tableau:

private DummyUser[] arrDummyUser = new DummyUser[]
{
    new DummyUser{
       email = "abc.xyz@email.com",
       language = "English"
    },
    new DummyUser{
       email = "def@email.com",
       language = "Spanish"
    }
};

5
2017-09-02 00:09



int[] array = new int[4]; 
array[0] = 10;
array[1] = 20;
array[2] = 30;

ou

string[] week = new string[] {"Sunday","Monday","Tuesday"};

ou

string[] array = { "Sunday" , "Monday" };

et dans un tableau multidimensionnel

    Dim i, j As Integer
    Dim strArr(1, 2) As String

    strArr(0, 0) = "First (0,0)"
    strArr(0, 1) = "Second (0,1)"

    strArr(1, 0) = "Third (1,0)"
    strArr(1, 1) = "Fourth (1,1)"

3
2017-07-24 06:42