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
Ответы
Ответ 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;
Ответ 9
Начиная с С# 6.0, оператор нулевого распространения может использоваться, чтобы выразить сжато как это:
if (array?.Count.Equals(0) ?? true)
Примечание 1: ?? false
?? false
необходима по следующей причине
Примечание 2: в качестве бонуса оператор также является "поточно-ориентированным"
Ответ 10
if (array?.Any() != true) { ... }
- Не забудьте иметь
using System.Linq;
- Обратите внимание, что нужно явно сравнить с
true
, так как базовый тип - bool?