Se una matrice è vuota, sembra che non sia possibile controllarne la lunghezza usando ".length". Qual è il modo migliore per verificare se un array è vuoto?If (Array.Length == 0)
risposta
Si può assolutamente controllare uno vuoto della lunghezza dell'array. Tuttavia, se provi a farlo su un riferimento null otterrai un'eccezione. Sospetto che sia quello che stai scontando. Puoi comunque far fronte a entrambi:
if (array == null || array.Length == 0)
Se questa non è la causa, si prega di fornire un breve ma completo programma che dimostri il problema. Se quello era la causa, vale la pena prendersi un momento per assicurarsi di comprendere riferimenti null vs "vuoti" collezioni/stringhe/qualsiasi cosa.
Sì, per la sicurezza avrei probabilmente fare:
if(array == null || array.Length == 0)
È possibile utilizzare .Length
== 0 se la lunghezza è vuota ed esiste la matrice, ma sei sicuro che non è nulla?
Questo è il modo migliore. Si prega di notare che Array è un oggetto in NET quindi è necessario verificare prima null.
vuoi dire vuoto o nullo, due cose diverse,
se la matrice è istanziato, ma vuota, poi la lunghezza è corretta, se non è stata creata un'istanza poi prova vs nulla
Il test suggerito è bene, fino a quando la matrice è intializzata ...
Martin.
Come altri hanno già suggerito è probabile che si ottenga un NullReferenceException
che può essere evitato verificando prima di vedere se il riferimento è null
. Tuttavia, è necessario chiedersi se tale controllo sia effettivamente giustificato. Lo faresti perché il riferimento potrebbe essere davvero null
e il suo null
ha un significato speciale nel tuo codice? O lo faresti per coprire un insetto? La natura della domanda mi porta a credere che sarebbe il secondo. In tal caso, è necessario esaminare il codice in modo approfondito e capire perché il riferimento non è stato inizializzato correttamente in primo luogo.
Jon Skeet ha risposto correttamente. Ricorda solo che l'ordine del test in "IF" è importante. Verifica il valore nullo prima della durata. Preferisco anche mettere il null sul lato sinistro dell'uguale ... solo un'abitudine che ho ricevuto da Java che ha reso il codice più efficiente e veloce ... Non penso che sia importante in molte applicazioni oggi, ma è una buona pratica.
se (null == matrice || Array.length == 0)
se (array.length> 0)
potresti almeno dire perché hai buttato giù ... cosa c'è di sbagliato con Questo? – Wills
Ciò provocherà un'eccezione di riferimento null se "array" è null. – computerGuyCJ
per una cosa, il tuo caso è spento; questo non è valido C# come scritto –
È possibile utilizzare
if (array == null || array.Length == 0)
O
if (!(array != null && array.Length >= 0))
NOTA !!!!! Per assicurare che C# implementerà correttamente il cortocircuito; devi confrontare l'oggetto con NULL prima di andare al confronto dei bambini dell'oggetto.
di controllo se l'array è nullo prima in modo che avrebbe evitare un'eccezione puntatore nullo
logica in qualsiasi lingua: se array è nullo o è vuota: fare ....
Se array
è null
, cercando di derefrence array.Length
getterà un NullReferenceException
. Se il codice considera null
un valore non valido per array
, è necessario rifiutarlo e dare la colpa al chiamante. Un tale modello è quello di gettare ArgumentNullException
:
void MyMethod(string[] array)
{
if (array == null) throw new ArgumentNullException(nameof(array));
if (array.Length > 0)
{
// Do something with array…
}
}
Se si desidera accettare una matrice null
come indicazione di non fare qualcosa o come un parametro opzionale, si può semplicemente non accedervi se è nullo:
void MyMethod(string[] array)
{
if (array != null)
{
// Do something with array here…
}
}
Se si desidera evitare di toccare array
quando è o null
o ha lunghezza zero, è possibile verificare entrambi allo stesso tempo con C#-6’s null coalescing operator.
void MyMethod(string[] array)
{
if (array?.Length > 0)
{
// Do something with array…
}
}
Superfluo Lunghezza check
Sembra strano che si sta trattando la matrice vuota come un caso speciale. In molti casi, se tu, ad esempio, esegui semplicemente il loop sull'array in ogni caso, non è necessario trattare l'array vuoto come caso speciale. foreach (var elem in array) {«body»}
semplicemente non eseguirà mai «body»
quando array.Length
è 0
. Se stai curando lo array == null || array.Length == 0
in particolare per, ad es., Migliorare le prestazioni, potresti considerare di lasciare un commento per i posteri. In caso contrario, il controllo di Length == 0
appare superfluo.
Il codice superfluo rende la comprensione di un programma più difficile perché le persone che leggono il codice presumono che ogni riga sia necessaria per risolvere qualche problema o raggiungere la correttezza. Se includi codice non necessario, i lettori passeranno per sempre a cercare di capire perché questa linea è o era necessaria prima di eliminarla ;-).
- 1. Qual è la differenza tra "#if Foo - 0 == 0" e "#if definito (Foo) && Foo == 0"?
- 2. Jasmine array.length expect
- 3. String.length() vs Array.length
- 4. mysql - if value = 0 shorten where statement
- 5. Disabilitare l'eliminazione "if (0)" in gcc
- 6. if ((123/1000)> 0) restituisce false
- 7. RangeError quando l'ingresso legame Array.length
- 8. Qual è il costo di chiamare array.length
- 9. Perché l'array di Ruby [array.length, count] restituisce []?
- 10. Differenza tra if (a - b <0) e if (a <b)
- 11. Qual è il punto di questi condizionali if (0)?
- 12. È appropriato l'affermazione. if (0! = espressione o variabile) {} in java?
- 13. if {} in if: endif
- 14. Pulizia nidificata "if {} else {if {} else {if {...}}}"
- 15. Array.length PHP per un array bidimensionale (asse y)
- 16. Linq if
- 17. #if debug -> #if myOwnConfig?
- 18. if-else-if rispetto mappa
- 19. Conversione a diramazioni if if consecutive
- 20. Utilizzo di request.getRemoteAddr() restituisce 0: 0: 0: 0: 0: 0: 0: 1
- 21. Strano if
- 22. Haskell IF
- 23. Se entrambi [0] == 0 e 0 == [[0]] sono veri del perché è [0] == [[0]] falso?
- 24. perché uno usare MACRO + 0 = 0
- 25. su Android getBounds disegnabili return Rect (0, 0 - 0, 0)
- 26. (oggetto) 0 == (oggetto) 0
- 27. Awk if else issues
- 28. if-else-if-else nell'espressione textfield
- 29. JavaScript if (x) vs if (x == true)
- 30. php stenografia if {} ELSE IF {} else {}
In quale situazione un array avrà .Lunghezza == 0? Una matrice dimensionata alla dimensione 0? – sooprise
... un array vuoto. –
@Soo: Sì, esattamente. –