55 votes

VB.NET Tableau de chaînes vides

Comment puis-je créer un tableau de chaînes de caractères unidimensionnel vide ?

0 votes

@Pacane S'il vous plaît lisez ceci .

47voto

Mark Brackett Points 46824

VB est Indexation à 0 dans les déclarations de tableaux donc quelque chose comme Dim myArray(10) as String vous donne 11 éléments. Il s'agit d'une erreur courante lors de la traduction de langues C.

Ainsi, pour un tableau vide, l'une ou l'autre des méthodes suivantes fonctionnerait :

Dim str(-1) as String ' -1 + 1 = 0, so this has 0 elements
Dim str() as String = New String() { } ' implicit size, initialized to empty

3 votes

Je fais toujours Dim str() as String = New String() { } parce que je pense que c'est la meilleure façon de voir qu'il s'agit d'un tableau de chaînes VIDE "{ }".

2 votes

Mark, Dim str(0) produit un tableau d'une longueur de 1 avec un NULL à l'index 0. La seconde, Dim str()...{ } produit un tableau vide avec une longueur de zéro comme le voulait YonahW.

0 votes

@RandyEppinger a raison (et ce depuis 3 ans...). str(0) produit un tableau de longueur 1 (étant indexé à 0, la longueur est +1 dans la déclaration). J'aurais dû mettre str(-1) (qui, lorsque +1 vous donne une longueur de 0).

39voto

G8RDA Points 202

Dim strEmpty(-1) As String

11 votes

Upvote parce que c'est correct. Cependant, pour plus de clarté, je préfère Dim strEmpty() As String = New String() {} comme Mark le propose et SoMoS l'approuve. Cependant, Mark décrit deux techniques qui ne sont pas équivalentes...voir ce commentaire.

11 votes

Mise à jour...Nous avons trouvé le suivant qui est équivalent et qui a moins de cérémonie : Dim myArray() = New String() {}

0 votes

Ou pour rendre les choses encore plus confuses - Dim s$(-1) o Dim s$() = {}

9voto

Joel Coehoorn Points 190579

Le tableau que vous avez créé par Dim s(0) As String N'EST PAS VIDE

En VB.Net, l'indice que vous utilisez dans le tableau est l'indice du dernier élément. Par défaut, VB.Net commence l'indexation à 0, vous avez donc un tableau qui a déjà un élément.

Vous devriez plutôt essayer d'utiliser System.Collections.Specialized.StringCollection ou (encore mieux) System.Collections.Generic.List(Of String) . Ils reviennent à peu près à la même chose qu'un tableau de chaînes de caractères, sauf qu'ils sont bien meilleurs pour ajouter et supprimer des éléments. Et soyons honnêtes : vous créerez rarement un vide sans vouloir ajouter au moins un élément à elle.

Si vous voulez vraiment un tableau de chaînes vide, déclarez-le comme ceci :

Dim s As String()

ou

Dim t() As String

4 votes

Joel, cela ne fournit pas le comportement demandé. Chacun de ceux-ci, t et s sont Nothing. YonahW voulait un tableau vide que la solution de GR8DA fournit, bien que je préfère : Dim strEmpty() As String = New String() {}

8voto

Chris Zwiryk Points 1162

Quelque chose comme :

Dim myArray(9) as String

Vous obtiendrez un tableau de 10 références String (chacune pointant vers Nothing).

Si vous n'êtes pas sûr de la taille au moment de la déclaration, vous pouvez déclarer un tableau de chaînes comme ceci :

Dim myArray() as String

Vous pourrez ensuite le diriger vers un tableau de cordes de taille appropriée :

ReDim myArray(9) as String

ZombieSheep a raison d'utiliser une liste si vous ne connaissez pas la taille totale et que vous devez la remplir dynamiquement. En VB.NET, ce serait :

Dim myList as New List(Of String)
myList.Add("foo")
myList.Add("bar")

Et ensuite pour obtenir un tableau à partir de cette liste :

myList.ToArray()

@Mark

Merci pour la correction.

1voto

ZombieSheep Points 18967

Je ne sais pas pourquoi vous voudriez le faire, mais la méthode C# serait de

string[] newArray = new string[0];

Je suppose que VB ne sera pas trop différent de cela.

Si vous construisez un tableau vide afin de pouvoir le remplir de valeurs plus tard, vous devriez vraiment envisager d'utiliser la fonction

List<string>

et en le convertissant en tableau (si vous en avez vraiment besoin comme tableau) avec

newListOfString.ToArray();

Prograide.com

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.

Powered by:

X