2009-10-22 16 views
10

Qual è il modo migliore per prendere un array in VB.NET che può essere Niente o inizializzato e dargli una lunghezza pari a zero?Qual è il modo consigliato per creare un array vuoto in VB.NET?

Le tre opzioni mi viene in mente sono:

ReDim oBytes(-1) 

oBytes = New Byte(-1) {} 

oBytes = New Byte() {} 

Il primo esempio è quello che la maggior parte degli sviluppatori nella mia azienda (che abbiamo usato per fare VB 6) hanno sempre utilizzato. Personalmente preferisco il terzo esempio in quanto è più facile capire cosa sta succedendo.

Quindi quali sono i lati positivi e negativi di ciascun approccio (le opzioni 2 e 3 sono molto simili, lo so)?


EDIT
Così Qualcuno sa di un motivo per evitare ReDim altro che perché è un residuo dei giorni VB?

Non che io non accetterò questo come la risposta se questo è tutto ciò che qualcuno ha!

+0

risposta a cura di fornire ulteriori giustificazioni per evitarlo –

risposta

11

vi consiglio: oBytes = New Byte() {}

Si dovrebbe cercare di evitare di "classici VB-ismi" come Redim, e altri reduci dal classico giorni VB. Consiglierei la terza opzione.

Modifica

Per fornire qualche informazione in più sul perché di evitarlo, vedi this MSDN page. Sebbene la pagina non sconsigli specificamente di farlo, puoi vedere che Redim soffre di difetti (e potenziale di confusione) che l'altra sintassi non ha.

  1. Redim può essere utilizzata solo su esistenti array. Anche così, è semanticamente equivalente alla dichiarazione di un array new. Redim rilascia il vecchio array e ne crea uno nuovo (quindi non è come se lo Redim abbia la capacità di "attaccare" o "tagliare" gli elementi). Inoltre, è distruttivo a meno che non venga utilizzata la parola chiave Preserve, anche se non vi è alcuna indicazione visiva che un incarico si sta verificando.
  2. Poiché Redim non è in grado di creare un array (ma può funzionare solo su array esistenti), può essere utilizzato solo all'interno di una procedura; a livello di classe sei costretto a usare il metodo New Byte() {}, lasciandoti due schemi visivamente distinti per l'assegnazione di nuovi array, anche se sono semanticamente identici.
+0

Sì sono d'accordo, questo è ciò che ha scatenato questa domanda, io tendo a rimuovere il vecchio codice VB ovunque lo trovo! – stevehipwell

+2

Non potrei essere più d'accordo. "ReDim" e "New Byte (-1)" sembrano errati. Ai miei occhi sembra che stia dicendo ReDim oBytes (da -1 a 0), che sembra dovrebbe fornire un array di due elementi (che sarà in Vb6). Per favore, per favore, PER FAVORE, non è possibile che il mondo faccia finta che non ci fosse VB prima di VB.net? Per favore? –

+0

@Binary Worrier - 100% con te su questo! È la ragione della maggior parte dei problemi di usabilità di VB.NET! – stevehipwell

Problemi correlati