Как проверить, является ли IEnumerable нулевым или пустым? - PullRequest
137 голосов
/ 19 февраля 2011

Я люблю string.IsNullOrEmpty метод. Я хотел бы иметь что-то, что позволило бы такую ​​же функциональность для IEnumerable. Есть ли такие? Может быть, какой-нибудь вспомогательный класс коллекции? Причина, по которой я спрашиваю, состоит в том, что в операторах if код выглядит загроможденным, если шаблон (mylist != null && mylist.Any()). Было бы намного чище иметь Foo.IsAny(myList).

Это сообщение не дает ответа: IEnumerable пуст? .

Ответы [ 16 ]

1 голос
/ 27 ноября 2017

У меня была такая же проблема, и я решил ее следующим образом:

    public bool HasMember(IEnumerable<TEntity> Dataset)
    {
        return Dataset != null && Dataset.Any(c=>c!=null);
    }

"c => c! = Null" будет игнорировать все нулевые объекты.

1 голос
/ 28 апреля 2017

Я построил это из ответа @Matt Greer

Он отлично ответил на вопрос ОП.

Я хотел что-то подобное, сохраняя при этом оригинальные возможностиЛюбое время, также проверяя на ноль.Я публикую это на тот случай, если кому-то еще понадобится нечто подобное.

В частности, я хотел бы иметь возможность передавать предикат.

public static class Utilities
{
    // Will return true if it is not null and contains elements.
    public static bool NotNullAny<T>(this IEnumerable<T> enumerable)
    {
        return enumerable != null && enumerable.Any();
    }

    // Will return true if it is not null and contains elements that satisfy the condition.
    public static bool NotNullAny<T>(this IEnumerable<T> enumerable, Func<T, bool> predicate)
    {
        return enumerable != null && enumerable.Any(predicate);
    }
}

Возможно, имя метода расширения может бытьлучше.

0 голосов
/ 08 июля 2019

Я использую это:

    public static bool IsNotEmpty(this ICollection elements)
    {
        return elements != null && elements.Count > 0;
    }

Ejem:

List<string> Things = null;
if (Things.IsNotEmpty())
{
    //replaces ->  if (Things != null && Things.Count > 0) 
}
0 голосов
/ 22 апреля 2018

Другое лучшее решение, как показано ниже, проверить пустое или нет?

for(var item in listEnumerable)
{
 var count=item.Length;
  if(count>0)
  {
         // not empty or null
   }
  else
  {
       // empty
  }
}
0 голосов
/ 13 октября 2016

Я использовал простой, если проверить это

проверить мое решение

foreach (Pet pet in v.Pets)
{
    if (pet == null)
    {
        Console.WriteLine(" No pet");// enumerator is empty
        break;
    }
    Console.WriteLine("  {0}", pet.Name);
}
0 голосов
/ 01 сентября 2016

просто добавьте using System.Linq и увидите магию, происходящую при попытке доступа к доступным методам в IEnumerable. Добавление этого даст вам доступ к методу с именем Count() так просто. просто не забудьте проверить null value перед вызовом count():)

...