2011-12-19 11 views
27

Czy istnieje funkcja w bibliotece .NET, która zwróci wartość true lub false, czy tablica ma wartość pustą, czy pustą? (Podobny do string.IsNullOrEmpty).IsNullOrEmpty odpowiednik dla Array? C#

Spojrzałem w klasie Array na taką funkcję, ale nie widziałem niczego.

tj

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

Co jest nie tak z 'if (arr! = Null && arr.Length! = 0)'? Lub stwórz metodę rozszerzenia, jeśli chcesz wielokrotnie używać tej metody. –

+3

@CodyGray to samo, co jest nie tak ze stringami, nie chcesz tego robić w każdym miejscu. –

+0

@CodyGray - Zgadzam się, ale widzę, że pisanie go staje się bolesne, gdy trzeba go wielokrotnie pisać. W większości moich projektów mam metodę rozszerzenia, która robi dokładnie to. – Polynomial

Odpowiedz

36

Nie ma istniejący, ale można użyć tej metody rozszerzenia:

/// <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); 
} 

Wystarczy umieścić to w klasie rozszerzeń gdzieś i będzie ona przedłużyć Array mieć metodę IsNullOrEmpty.

+0

Biorąc pod uwagę którąkolwiek ze zmiennych (a, b lub c), możesz pokazać jej użycie? Jedyny sposób, w jaki widzę, że działa, to nowy Array(). IsNullOrEmpty (a); – maxp

+1

Nie trzeba używać nawiasów. Poza tym nadpisujesz normalne zachowanie tego, co dzieje się, gdy wywołujesz metodę na instancji zerowej, więc wstawiłem kilka komentarzy xml dla intellisense. –

+0

@YuriyFaktorovich - Tak, nawias to naprawdę zwyczaj. Wydaje mi się dziwne, jeśli bez nich łączę logikę. Masz poprawne zachowanie null, więc zaktualizuję. – Polynomial

1

Nie, ale można to napisać siebie jako metodę rozszerzenia. Lub metodą statyczną we własnej bibliotece, jeśli nie lubisz metod wywoływania na typie zerowym.

22

Można stworzyć własną metodę rozszerzenia:

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

Naprawdę podoba mi się ta odpowiedź lepiej niż moja :) – Polynomial

+0

Nie sądzę, że to działa. –

+0

@YuriyFaktorovich - Właśnie przetestowałem to, działa idealnie dla mnie. – Polynomial

5

bardziej ogólny jeśli używasz ICollection<T>:

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

W przypadku inicjowany you array jak

string[] myEmpytArray = new string[4]; 

następnie sprawdzić jeśli twoje elementy tablicy są puste, użyj

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

Spróbuj

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

Z Null-conditional Operator wprowadzonego w VS 2015, przeciwnie Nie NullOrEmpty może być:

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

ale wersja IsNullOrEmpty wygląda nieco brzydki z powodu operatora pierwszeństwo:

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

Można również użyć Any na tworzenie metodę rozszerzenia:

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

Nie zapomnij dodać using System.Linq; na swoim wykorzystujących sprawozdania.