2011-12-19 2 views
27

Есть ли функция в библиотеке .NET, которая вернет true или false в отношении того, является ли массив пустой или пустой? (Аналогично string.IsNullOrEmpty).IsNullOrEmpty эквивалент для массива? C#

Я просмотрел класс Array для такой функции, но ничего не смог увидеть.

т.е.

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

Что случилось с 'if (arr! = Null && arr.Length! = 0)'? Или создайте метод расширения, если вам нужно использовать его повторно. –

+3

@CodyGray то же самое, что неправильно с ним для строк, вы не хотите делать это повсюду. –

+0

@CodyGray - Я согласен, но я вижу, что это становится больно писать, если вам придется писать его повторно. У меня есть метод расширения в большинстве моих проектов, который делает именно это. – Polynomial

ответ

36

Существует не существующий, но вы могли бы использовать этот метод расширения:

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

Просто поместите это в классе расширений где-то, и он будет распространяться Array иметь IsNullOrEmpty метод.

+0

Если вы указали какую-либо из переменных (a, b или c), можете ли вы продемонстрировать ее использование? Единственный способ, с помощью которого я могу работать, это новый Array(). IsNullOrEmpty (a); – maxp

+1

Нет необходимости в скобках. Также вы переопределяете нормальное поведение того, что происходит, когда вы вызываете метод в экземпляре null, поэтому я бы добавил некоторые комментарии xml для intellisense. –

+0

@YuriyFaktorovich - Да, скобки - это просто привычка. Чувствует себя странно, если я не буду сочетать логику без них. Вы правы в отношении нулевого поведения, поэтому я буду обновлять. – Polynomial

1

Нет, но вы можете написать его самостоятельно, как метод расширения. Или статический метод в вашей собственной библиотеке, если вам не нравятся методы вызова для нулевого типа.

22

Вы можете создать свой собственный метод расширения:

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

Мне действительно нравится этот ответ лучше, чем у меня :) – Polynomial

+0

Я не думаю, что это сработает. –

+0

@YuriyFaktorovich - Просто протестировал его, отлично работает для меня. – Polynomial

5

Более общим, если вы используете ICollection<T>:

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

В случае, если инициализируется You массив как

string[] myEmpytArray = new string[4]; 

Затем проверить если элементы массива пустые, используйте

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

Попробуйте

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

С Null-conditional Operator введен в VS 2015, противоположное Не NullOrEmpty может быть:

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

но версия IsNullOrEmpty выглядит немного некрасиво из-за оператора приоритет:

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

Вы также можете использовать Any на создание методы расширения:

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

Не забудьте добавить using System.Linq; на ваших с помощью утверждений.

Смежные вопросы