Лучший способ сделать это вместо этого - использовать IEnumerable (Который является более общим, чем ICollection, так как ICollection реализует IEnumerable) и просто проверяя его на нуль и еще возвращаются Any() от операторов Linq в
public static bool IsCollectionNullOrEmpty<T>(IEnumerable<T> instance)
{
if (instance == null)
{
return true;
}
return !instance.Any();
}
Или, как другие упомянутые если вы хотите придерживаться ICollection, то нет никакой необходимости проверьте наличие массивов и все это, вы возьмете ICollection, и ICollection имеет член счета, поэтому вы можете напрямую использовать счет, не нужно передавать массив в новый конструктор списка для доступа к свойству count.
Причина, по которой вы не можете просто сделать. Вычисление на случайном массиве связано с тем, что реализация скрыта, но поскольку в этом контексте ваш параметр не является эксцентричным массивом, а ICollection, вы можете просто вызвать .Count on it (array имеет метод .Count, это просто скрыто, но оно должно иметь его, так как он реализует ICollection)
https://msdn.microsoft.com/en-us/library/ms173157.aspx
Вот почему:
((ICollection)(new int[] { 0 })).Count; // this compiles
(new int[] { 0 }).Count; // this doesn't, althought it's the same object
Так что, если вы действительно хотите, чтобы написать это, как вы вы могли бы упростить его s такая:
public static bool IsCollectionNullOrEmpty<T>(ICollection<T> instance)
{
if (instance == null)
{
return true;
}
return instance.Count <= 0; // this does the exact same thing as your previous else block except it's massively simpler and doesn't create a new list
}
Обратите внимание, что это на самом деле не звучит как полезный метод на всех (я бы бросить его лично), так как он едва добавляет любое значение по любому оператору, так что я бы просто проверить нуль если необходимо, а затем вызвать любой, не создавая для этого собственный метод.
Вместо того, чтобы использовать этот метод, я бы просто сделать следующее каждый раз у меня есть коллекция мне нужно проверить:
if(mycollection == null || (!mycollection.Any())
'вернуть экземпляр == NULL || instance.Count == 0; 'это все, что вам нужно, я верю. – Phill