Подтвердить что ты не робот

IsNullOrEmpty эквивалент для массива? С#

Есть ли в библиотеке .NET функция, которая будет возвращать истину или ложь в отношении того, является ли массив нулевым или пустым? (Аналогично string.IsNullOrEmpty).

Я посмотрел в классе 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
4b9b3361

Ответ 1

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

/// <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.

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

Ответ 5

Если вы инициализировали массив, например

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

Ответ 6

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

Ответ 7

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

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

Не забудьте добавить using System.Linq; в свои операторы.

Ответ 8

Проверка на ноль или пусто или длина была упрощена с С# Linq. С оператором null coalesce можно просто сделать это:

if (array?.Any())
    return true;
else return false;

Ответ 10

if (array?.Any() != true) { ... }
  • Не забудьте иметь using System.Linq;
  • Обратите внимание, что нужно явно сравнить с true, так как базовый тип - bool?