2011-12-19 11 views
27

Esiste una funzione nella libreria .NET che restituirà true o false sul fatto che un array sia nullo o vuoto? (Simile a string.IsNullOrEmpty).IsNullOrEmpty equivalente per Array? C#

Ho dato un'occhiata alla classe Array per una funzione come questa ma non riuscivo a vedere nulla.

cioè

var a = new string[]{}; 
string[] b = null; 
var c = new string[]{"hello"}; 

IsNullOrEmpty(a); //returns true 
IsNullOrEmpty(b); //returns true 
IsNullOrEmpty(c); //returns false 
+1

Cosa c'è di sbagliato in 'if (arr! = Null && arr.Length! = 0)'? O creare un metodo di estensione se è necessario utilizzarlo ripetutamente. –

+3

@CodyGray stessa cosa che non va per le stringhe, non vuoi farlo da tutte le parti. –

+0

@CodyGray - Sono d'accordo, ma posso vedere che diventa un dolore scrivere se si dovesse scrivere ripetutamente. Ho un metodo di estensione nella maggior parte dei miei progetti che fa esattamente questo. – Polynomial

risposta

36

Non c'è uno già esistente, ma si potrebbe utilizzare questo metodo di estensione:

/// <summary>Indicates whether the specified array is null or has a length of zero.</summary> 
/// <param name="array">The array to test.</param> 
/// <returns>true if the array parameter is null or has a length of zero; otherwise, false.</returns> 
public static bool IsNullOrEmpty(this Array array) 
{ 
    return (array == null || array.Length == 0); 
} 

Il posto giusto questo in una classe di estensioni da qualche parte e che sarà estendere Array di avere un metodo IsNullOrEmpty.

+0

Data una delle variabili (a, b o c) potresti dimostrarne l'utilizzo? L'unico modo in cui posso vederlo funzionare è il nuovo array(). IsNullOrEmpty (a); – maxp

+1

Nessuna parentesi. Inoltre stai ignorando il normale comportamento di ciò che accade quando chiami un metodo su un'istanza nulla, quindi inserisco alcuni commenti xml per intellisense. –

+0

@YuriyFaktorovich - Sì, la parentesi è solo un'abitudine davvero. Mi sento strano se combinassi la logica senza di loro. Hai ragione sul comportamento nullo, quindi aggiornerò. – Polynomial

1

No, ma è possibile scrivere da soli come un metodo di estensione. O un metodo statico nella tua libreria, se non ti piace chiamare metodi su un tipo nullo.

22

Si potrebbe creare il proprio metodo di estensione:

public static bool IsNullOrEmpty<T>(this T[] array) 
{ 
    return array == null || array.Length == 0; 
} 
+4

In realtà mi piace questa risposta meglio della mia :) – Polynomial

+0

Non penso che funzioni. –

+0

@YuriyFaktorovich - L'ho appena testato, funziona perfettamente per me. – Polynomial

5

più generico se si utilizza ICollection<T>:

public static bool IsNullOrEmpty<T> (this ICollection<T> collection) 
{ 
    return collection == null || collection.Count == 0; 
} 
1

Nel caso in cui è stata inizializzata si serie come

string[] myEmpytArray = new string[4]; 

Poi per verificare se i tuoi elementi dell'array sono vuoti usa

myEmpytArray .All(item => item == null) 

Prova

public static bool IsNullOrEmpty<T> (this ICollection<T> collection) 
{ 
    if (collection == null || collection.Count == 0) 
     return true; 
    else 
     return collection.All(item => item == null); 
} 
9

Con Null-conditional Operator introdotto in VS 2015, il contrario è Non NullOrEmpty può essere:

if (array?.Length > 0) {   // similar to if (array != null && array.Length > 0) { 

ma la versione IsNullOrEmpty sembra un po 'brutto perché dell'operatore precedenza:

if (!(array?.Length > 0)) { 
1

È inoltre possibile utilizzare Any su come creare il metodo di estensione:

public static bool IsNullOrEmpty<T>(this T[] array) where T : class 
    { 
     return (array == null || !array.Any()); 
    } 

Non dimenticare di aggiungere using System.Linq; sui vostri utilizzando le istruzioni.