IList.IsNullOrEmpty()
От: Keith  
Дата: 30.06.09 14:40
Оценка:
Простой вопрос:
Как проверить у перечислимого типа или списка или другого массива, что он не равен null и не пустой одним действием?
Т.е. надоело писать:
if (myCollection != null && myCollection.Count > 0)
хочется как-то так:
if (List.IsNullOrEmpty(myCollection))

зы Можно конечно свои коллекции использовать, но хочется узнать как это делается на стандартных списках.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: IList.IsNullOrEmpty()
От: Kore Sar  
Дата: 30.06.09 14:46
Оценка:
Здравствуйте, Keith, Вы писали:

K>Простой вопрос:

K> Как проверить у перечислимого типа или списка или другого массива, что он не равен null и не пустой одним действием?
K> Т.е. надоело писать:
K> if (myCollection != null && myCollection.Count > 0)
K> хочется как-то так:
K> if (List.IsNullOrEmpty(myCollection))

K> зы Можно конечно свои коллекции использовать, но хочется узнать как это делается на стандартных списках.



public static ListExtentionMethods
{
  public static bool IsNullOrEmpty(IList<T> list)
  {
    return list != null && list.Count > 0;
  }
}

//использование

var myList = new List<int>() { 1, 2, 3 };
if (myList.IsNullOrEmpty())
{
}
Re: IList.IsNullOrEmpty()
От: samius Япония http://sams-tricks.blogspot.com
Дата: 30.06.09 14:47
Оценка:
Здравствуйте, Keith, Вы писали:

K>Простой вопрос:

K> Как проверить у перечислимого типа или списка или другого массива, что он не равен null и не пустой одним действием?
K> Т.е. надоело писать:
K> if (myCollection != null && myCollection.Count > 0)
K> хочется как-то так:
K> if (List.IsNullOrEmpty(myCollection))

что мешает написать extension method?

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

if (myCollection.IsNullOrEmpty())
    ...
Re[2]: IList.IsNullOrEmpty()
От: Keith  
Дата: 30.06.09 14:59
Оценка:
Здравствуйте, Kore Sar, Вы писали:

KS>
KS>public static ListExtentionMethods
KS>{
KS>  public static bool IsNullOrEmpty(IList<T> list)
KS>  {
KS>    return list != null && list.Count > 0;
KS>  }
KS>}

KS>//использование

KS>var myList = new List<int>() { 1, 2, 3 };
KS>if (myList.IsNullOrEmpty())
KS>{
KS>}
KS>



И носить этот класс из проекта в проект?
Неужели стандартных средств нет?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: IList.IsNullOrEmpty()
От: Keith  
Дата: 30.06.09 15:01
Оценка:
Здравствуйте, samius, Вы писали:

K>>Простой вопрос:

K>> Как проверить у перечислимого типа или списка или другого массива, что он не равен null и не пустой одним действием?
K>> Т.е. надоело писать:
K>> if (myCollection != null && myCollection.Count > 0)
K>> хочется как-то так:
K>> if (List.IsNullOrEmpty(myCollection))

S>что мешает написать extension method?


Религия
К тому же придется этот экстеншн писать в каждом проекте.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: IList.IsNullOrEmpty()
От: samius Япония http://sams-tricks.blogspot.com
Дата: 30.06.09 15:05
Оценка:
Здравствуйте, Keith, Вы писали:

K>Здравствуйте, samius, Вы писали:


S>>что мешает написать extension method?


K> Религия

K> К тому же придется этот экстеншн писать в каждом проекте.

Остается пожелать допускать поменьше ситуаций, где коллекция может быть null. Тогда и проверять на пустоту будет проще стандартными средствами.
Re[3]: IList.IsNullOrEmpty()
От: Kore Sar  
Дата: 30.06.09 15:05
Оценка: :)
Здравствуйте, Keith, Вы писали:

K> И носить этот класс из проекта в проект?

K> Неужели стандартных средств нет?

Стандартные тоже есть! Смотри пример:

if (myList != null && myList.Count > 0)
Re[4]: IList.IsNullOrEmpty()
От: Keith  
Дата: 30.06.09 15:07
Оценка:
Здравствуйте, Kore Sar, Вы писали:

K>> И носить этот класс из проекта в проект?

K>> Неужели стандартных средств нет?

KS>Стандартные тоже есть! Смотри пример:


KS>
KS>if (myList != null && myList.Count > 0)
KS>


Шутки ценю, спасибо
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: IList.IsNullOrEmpty()
От: Keith  
Дата: 30.06.09 15:10
Оценка: :)
Здравствуйте, samius, Вы писали:

S>>>что мешает написать extension method?


K>> Религия

K>> К тому же придется этот экстеншн писать в каждом проекте.

S>Остается пожелать допускать поменьше ситуаций, где коллекция может быть null. Тогда и проверять на пустоту будет проще стандартными средствами.


Это само собой, но на всякий случай удобно было бы подстаховаться.
Ну ладно, раз стандартных средств нет, то буду писать так и ожидать исключений:
if (myList.Count > 0)
...

Спасибо
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: IList.IsNullOrEmpty()
От: Spiceman  
Дата: 30.06.09 15:30
Оценка:
Здравствуйте, Keith, Вы писали:

K> Это само собой, но на всякий случай удобно было бы подстаховаться.

K> Ну ладно, раз стандартных средств нет, то буду писать так и ожидать исключений:
K> if (myList.Count > 0)
K> ...

K> Спасибо


Обычно в таких случаях (подстраховаться) в начале метода пишут проверку допустимых значений параметров. В данном случае проверка myList на null и удобоваримое ArgumentNullException.
Re[6]: IList.IsNullOrEmpty()
От: Keith  
Дата: 30.06.09 15:36
Оценка: :)
Здравствуйте, Spiceman, Вы писали:

K>> Это само собой, но на всякий случай удобно было бы подстаховаться.

K>> Ну ладно, раз стандартных средств нет, то буду писать так и ожидать исключений:
K>> if (myList.Count > 0)
K>> ...

K>> Спасибо


S>Обычно в таких случаях (подстраховаться) в начале метода пишут проверку допустимых значений параметров. В данном случае проверка myList на null и удобоваримое ArgumentNullException.


Я пока не готов выделять отдельный регион в начале метода на проверку входных параметров.
Да, я знаю, что это хорошо, красиво и полезно
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: IList.IsNullOrEmpty()
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 30.06.09 16:26
Оценка: +2
Здравствуйте, Keith, Вы писали:

K>Простой вопрос:

K> Как проверить у перечислимого типа или списка или другого массива, что он не равен null и не пустой одним действием?
K> Т.е. надоело писать:
K> if (myCollection != null && myCollection.Count > 0)
K> хочется как-то так:
K> if (List.IsNullOrEmpty(myCollection))

K> зы Можно конечно свои коллекции использовать, но хочется узнать как это делается на стандартных списках.


Все методы Linq, которые возвращаюют последовательности никогда не возвращают null.
Советую и вам такого соглашения придерживаться.
Re[2]: IList.IsNullOrEmpty()
От: _FRED_ Черногория
Дата: 01.07.09 04:47
Оценка:
Здравствуйте, gandjustas, Вы писали:

K>>Простой вопрос:

K>> Как проверить у перечислимого типа или списка или другого массива, что он не равен null и не пустой одним действием?
K>> Т.е. надоело писать:
K>> if (myCollection != null && myCollection.Count > 0)
K>> хочется как-то так:
K>> if (List.IsNullOrEmpty(myCollection))

K>> зы Можно конечно свои коллекции использовать, но хочется узнать как это делается на стандартных списках.


G>Все методы Linq, которые возвращаюют последовательности никогда не возвращают null.

G>Советую и вам такого соглашения придерживаться.

А при чём тут линк и то, что его методы возвращают?
Help will always be given at Hogwarts to those who ask for it.
Re[3]: IList.IsNullOrEmpty()
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 01.07.09 05:12
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, gandjustas, Вы писали:


K>>>Простой вопрос:

K>>> Как проверить у перечислимого типа или списка или другого массива, что он не равен null и не пустой одним действием?
K>>> Т.е. надоело писать:
K>>> if (myCollection != null && myCollection.Count > 0)
K>>> хочется как-то так:
K>>> if (List.IsNullOrEmpty(myCollection))

K>>> зы Можно конечно свои коллекции использовать, но хочется узнать как это делается на стандартных списках.


G>>Все методы Linq, которые возвращаюют последовательности никогда не возвращают null.

G>>Советую и вам такого соглашения придерживаться.

_FR>А при чём тут линк и то, что его методы возвращают?

Не при чем, просто соглашение удобное.
Re[4]: IList.IsNullOrEmpty()
От: _FRED_ Черногория
Дата: 01.07.09 06:24
Оценка:
Здравствуйте, gandjustas, Вы писали:

K>>>> Как проверить у перечислимого типа или списка или другого массива, что он не равен null и не пустой одним действием?

G>>>Все методы Linq, которые возвращаюют последовательности никогда не возвращают null.
G>>>Советую и вам такого соглашения придерживаться.
_FR>>А при чём тут линк и то, что его методы возвращают?
G>Не при чем, просто соглашение удобное.

Соглашение без спора удобное и придерживаться-то его, несомненно, нужно, но не в этом месте.

Придерживаться этого соглашения следует при возврате значений из методов или свойств. Но, например, при проверке аргументов, с которыми был вызван ваш метод, рассчитывать на соблюдение данного соглашения не стоит (кстати сказать, именно так поступает и сам линк). Потому что передаваться в метод может, например, не результат вызова другого метода, а значение локальной переменной, в котором может быть всё что угодно.
Help will always be given at Hogwarts to those who ask for it.
Re: IList.IsNullOrEmpty()
От: _FRED_ Черногория
Дата: 01.07.09 06:32
Оценка:
Здравствуйте, Keith, Вы писали:

K>Простой вопрос:

K> Как проверить у перечислимого типа или списка или другого массива, что он не равен null и не пустой одним действием?
K> Т.е. надоело писать:
K> if (myCollection != null && myCollection.Count > 0)
K> хочется как-то так:
K> if (List.IsNullOrEmpty(myCollection))

K> зы Можно конечно свои коллекции использовать, но хочется узнать как это делается на стандартных списках.


У меня есть библиотечка, в которой есть класс Argument с набором методов (в том числе):

  [DebuggerStepThrough]
  public static class Argument
  {
    #region NotNull

    public static void NotNull(object value, string name);

    public static void NotNull<T>(T? value, string name) where T : struct;

    #endregion NotNull

    #region NotNullOrEmpty

    public static void NotNullOrEmpty(string value, string name);

    public static void NotNullOrEmpty<T>(ICollection<T> value, string name);

    public static void NotNullOrEmpty(ICollection value, string name);

    public static void NotNullOrEmpty<T>(T[] value, string name);

    public static void NotNullOrEmpty(IEnumerable value, string name);

    #endregion NotNullOrEmpty

    #region OutOfRange

    public static void OutOfRange(bool expression, string name);

    public static void OutOfRange(bool expression, object value, string name);

    #endregion OutOfRange

    public static void TypeIs<T>(T value, Type type, string name) where T : class;
  }

Покрывает процентов девяносто восемь всех необходимых проверок. Так и тягаю эту сборочку туда-сюда. Или копирую исходники, если тягание не подходит.
Help will always be given at Hogwarts to those who ask for it.
Re[2]: IList.IsNullOrEmpty()
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 01.07.09 06:39
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, Keith, Вы писали:


K>>Простой вопрос:

K>> Как проверить у перечислимого типа или списка или другого массива, что он не равен null и не пустой одним действием?
K>> Т.е. надоело писать:
K>> if (myCollection != null && myCollection.Count > 0)
K>> хочется как-то так:
K>> if (List.IsNullOrEmpty(myCollection))

K>> зы Можно конечно свои коллекции использовать, но хочется узнать как это делается на стандартных списках.


_FR>У меня есть библиотечка, в которой есть класс Argument с набором методов (в том числе):


А не легче Code Contracts взять?
Re[3]: IList.IsNullOrEmpty()
От: _FRED_ Черногория
Дата: 01.07.09 07:09
Оценка:
Здравствуйте, gandjustas, Вы писали:

_FR>>У меня есть библиотечка, в которой есть класс Argument с набором методов (в том числе):


G>А не легче Code Contracts взять?


C Code Contracts под 2008 (Pex, ты его имеешь в виду?) у меня загогулина выходит — WPF приложение не собирается (что-то не могу сейчас ссылку отыскать на описание, что-то там с билд-таргетами путается).
Help will always be given at Hogwarts to those who ask for it.
Re[4]: IList.IsNullOrEmpty()
От: _FRED_ Черногория
Дата: 01.07.09 07:11
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>C Code Contracts под 2008 (Pex, ты его имеешь в виду?) у меня загогулина выходит — WPF приложение не собирается (что-то не могу сейчас ссылку отыскать на описание, что-то там с билд-таргетами путается).


Во: http://social.msdn.microsoft.com/Forums/en-US/vswpfdesigner/thread/39ea7473-bb25-4b61-8b42-456b0301157f
Help will always be given at Hogwarts to those who ask for it.
Re[4]: IList.IsNullOrEmpty()
От: Аноним  
Дата: 01.07.09 08:50
Оценка: 30 (1)
Здравствуйте, _FRED_, Вы писали:

_FR>C Code Contracts под 2008 (Pex, ты его имеешь в виду?) у меня загогулина выходит — WPF приложение не собирается (что-то не могу сейчас ссылку отыскать на описание, что-то там с билд-таргетами путается).


наверное его имели ввиду
Code Contracts library for .NET 3.5

а здесь дока на русском (для топикстартера)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.