2009-10-22 7 views
10

Quelle est la meilleure façon de prendre un tableau dans VB.NET qui peut être Nothing ou initialisé et lui donner une longueur de zéro?Quel est le moyen conseillé pour créer un tableau vide dans VB.NET?

Les trois options que je peux penser sont:

ReDim oBytes(-1) 

oBytes = New Byte(-1) {} 

oBytes = New Byte() {} 

Le premier exemple est ce que la plupart des développeurs dans mon entreprise (nous avons utilisé pour faire VB 6) ont toujours utilisé. Personnellement, je préfère le troisième exemple car il est le plus facile de comprendre ce qui se passe.

Alors, quels sont les aspects positifs et négatifs de chaque approche (les options 2 et 3 sont très similaires, je le sais)?


EDIT
ne donc que quelqu'un sait d'une raison pour éviter ReDim autre que parce qu'il est un vestige de l'époque VB?

Non que je n'accepterai pas cela comme réponse si c'est tout ce que quelqu'un a!

+0

Réponse éditée pour fournir une justification supplémentaire pour l'éviter –

Répondre

11

Je recommande: oBytes = New Byte() {}

Vous devriez essayer d'éviter « VB-ismes classiques » comme Redim, et d'autres survivances de l'époque classique VB. Je recommanderais la troisième option.

Modifier

de fournir plus d'informations sur les raisons pour l'éviter, voir this MSDN page. Bien que la page ne vous déconseille pas spécifiquement, vous pouvez voir que Redim souffre de lacunes (et de risque de confusion) que l'autre syntaxe ne présente pas.

  1. Redim ne peut être utilisé sur tableaux existants. Même ainsi, il est sémantiquement équivalent à déclarer un tableau new. Redim libère l'ancien tableau et en crée un nouveau (ce n'est donc pas comme si Redim avait la possibilité de "coller" ou "couper" des éléments). De plus, il est destructeur sauf si le mot-clé Preserve est utilisé, même s'il n'y a aucune indication visuelle qu'une affectation est en cours.
  2. Parce que Redim ne peut pas créer un tableau (mais ne peut fonctionner que sur des tableaux existants), il ne peut être utilisé que dans une procédure; Au niveau de la classe, vous êtes obligé d'utiliser la méthode New Byte() {}, vous laissant avec deux modèles visuellement distincts pour assigner de nouveaux tableaux, même s'ils sont sémantiquement identiques.
+0

Oui Je suis d'accord, c'est ce qui a déclenché cette question, j'ai tendance à supprimer le vieux code VB partout où je le trouve! – stevehipwell

+2

Je ne pouvais pas être plus d'accord. "ReDim" et "New Byte (-1)" semblent juste WRONG. À mon avis, on dirait ReDim oBytes (-1 à 0), qui devrait donner un tableau de deux éléments (ce qui sera le cas dans Vb6). S'il vous plaît, s'il vous plaît SVP ne peut pas le monde juste prétendre qu'il n'y avait pas de VB avant VB.net? S'il vous plaît? –

+0

@Binary Worrier - 100% avec vous sur ce! C'est la raison de la plupart des problèmes d'utilisabilité de VB.NET! – stevehipwell

Questions connexes