Est-il possible de créer un tableau vide sans en spécifier la taille ?
Par exemple, j'ai créé :
String[] a = new String[5];
Peut-on créer le tableau de chaînes ci-dessus sans la taille ?
Est-il possible de créer un tableau vide sans en spécifier la taille ?
Par exemple, j'ai créé :
String[] a = new String[5];
Peut-on créer le tableau de chaînes ci-dessus sans la taille ?
Si vous devez utiliser une collection dont vous ne connaissez pas la taille à l'avance, il existe de meilleures options que les tableaux.
Utilisez un List<string>
à la place - il vous permettra d'ajouter autant d'éléments que vous le souhaitez et si vous avez besoin de retourner un tableau, appelez ToArray()
sur la variable.
var listOfStrings = new List<string>();
// do stuff...
string[] arrayOfStrings = listOfStrings.ToArray();
Si vous doit créer un tableau vide, vous pouvez le faire :
string[] emptyStringArray = new string[0];
@Oded -- string[] emptyStringArray = new string[0] ; ne donne pas un tableau vide, n'est-ce pas ? On dirait que c'est un tableau avec un élément où cet élément est nul.
@roryap - Non. Il en résulte un string[]
qui n'a pas d'éléments. Si vous essayez d'accéder à emptyStringArray[0]
vous obtiendrez un IndexOutOfRangeException
@Oded -- Merci, je suis assez nouveau en C#. En VB, l'indice fourni est la borne supérieure, et non le nombre d'éléments.
En développant cette réponse, vous pouvez également initialiser le tableau avec des éléments sans spécifier la taille OU le type, le compilateur déduira l'un ou l'autre à partir de l'initialisateur : var a = new []{"a", "b", "c"} ; Il s'agit toujours d'un tableau de chaînes fortement typé.
Exception non gérée : System.IndexOutOfRangeException : Index was outside the boun ds of the array. at ArrayClass.Main(String[] args). J'ai rencontré cette erreur après avoir modifié mon int[] variable = new int[]{}
@yogesh : C'est étrange. Quand on écrit par exemple int[] variable = new int[]{}
et l'utiliser par exemple dans une boucle telle que foreach (var s in variable){ Console.WriteLine(s);}
le code est compilé : int[] args1 = new int[0];
et foreach (int num in args1){Console.WriteLine(num);}
. Il ne devrait donc y avoir aucune différence entre l'utilisation de new int[0]
et new int[]{}
car les deux sont compilés dans le même code.
Il n'y a pas beaucoup d'intérêt à déclarer un tableau sans taille. Un tableau concerne la taille . Lorsque vous déclarez un tableau de taille spécifique, vous spécifiez le nombre fixe d'emplacements disponibles dans une collection qui peut contenir des choses, et la mémoire est allouée en conséquence. Pour y ajouter quelque chose, vous devrez de toute façon réinitialiser le tableau existant (même si vous redimensionnez le tableau, voir ce fil de discussion ). L'un des rares cas où vous voudriez initialiser un tableau vide serait de passer array comme argument.
Si vous voulez définir une collection alors que vous ne savez pas quelle taille elle peut avoir, le tableau n'est pas votre choix, mais quelque chose comme une List<T>
ou similaire.
Cela dit, la seule façon de déclarer un tableau sans spécifier sa taille est d'avoir un tableau vide de taille 0 . hemant et Alex Dn offre deux possibilités. Une autre alternative plus simple consiste à simplement :
string[] a = { };
[ Les éléments à l'intérieur de la parenthèse doivent être implicitement convertibles en type défini, par exemple, string[] a = { "a", "b" };
]
Ou encore une autre :
var a = Enumerable.Empty<string>().ToArray();
Voici une méthode plus déclarative :
public static class Array<T>
{
public static T[] Empty()
{
return Empty(0);
}
public static T[] Empty(int size)
{
return new T[size];
}
}
Maintenant vous pouvez appeler :
var a = Array<string>.Empty();
//or
var a = Array<string>.Empty(5);
Je n'en vois pas l'utilité, sauf lorsque vous devez passer un tableau en paramètre. Il y a quelques cas dans la réflexion où une méthode accepte un tableau d'objets et vous pourriez vouloir passer un tableau vide pour effectuer une action par défaut. Je vais modifier ma réponse.
Vous avez par exemple une interface implémentée par plusieurs classes qui renvoient un IEnumerable et l'une des implémentations n'a pas d'éléments pour la méthode et renvoie un tableau vide par exemple.
@IgnacioSolerGarcia Je renverrais un tableau dans ce cas si et seulement si c'est une application extrêmement critique en termes de performances. Je dirai que les tableaux sont dépassés et devraient être évités si vous le pouvez. Voir ce par Lippert et cette question de S.O.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
stackoverflow.com/questions/151936/ Vérifiez ce lien, il peut vous aider à comprendre clairement les choses.
4 votes
Voir aussi toutes les syntaxes d'initialisation des matrices possibles