Здравствуйте, Keith, Вы писали:
K>Простой вопрос: K> Как проверить у перечислимого типа или списка или другого массива, что он не равен null и не пустой одним действием? K> Т.е. надоело писать: K> if (myCollection != null && myCollection.Count > 0) K> хочется как-то так: K> if (List.IsNullOrEmpty(myCollection))
K> зы Можно конечно свои коллекции использовать, но хочется узнать как это делается на стандартных списках.
Все методы Linq, которые возвращаюют последовательности никогда не возвращают null.
Советую и вам такого соглашения придерживаться.
Здравствуйте, _FRED_, Вы писали:
_FR>C Code Contracts под 2008 (Pex, ты его имеешь в виду?) у меня загогулина выходит — WPF приложение не собирается (что-то не могу сейчас ссылку отыскать на описание, что-то там с билд-таргетами путается).
Здравствуйте, samius, Вы писали:
S>>>что мешает написать extension method?
K>> Религия K>> К тому же придется этот экстеншн писать в каждом проекте.
S>Остается пожелать допускать поменьше ситуаций, где коллекция может быть null. Тогда и проверять на пустоту будет проще стандартными средствами.
Это само собой, но на всякий случай удобно было бы подстаховаться.
Ну ладно, раз стандартных средств нет, то буду писать так и ожидать исключений:
if (myList.Count > 0)
...
Здравствуйте, Spiceman, Вы писали:
K>> Это само собой, но на всякий случай удобно было бы подстаховаться. K>> Ну ладно, раз стандартных средств нет, то буду писать так и ожидать исключений: K>> if (myList.Count > 0) K>> ...
K>> Спасибо
S>Обычно в таких случаях (подстраховаться) в начале метода пишут проверку допустимых значений параметров. В данном случае проверка myList на null и удобоваримое ArgumentNullException.
Я пока не готов выделять отдельный регион в начале метода на проверку входных параметров.
Да, я знаю, что это хорошо, красиво и полезно
Простой вопрос:
Как проверить у перечислимого типа или списка или другого массива, что он не равен null и не пустой одним действием?
Т.е. надоело писать:
if (myCollection != null && myCollection.Count > 0)
хочется как-то так:
if (List.IsNullOrEmpty(myCollection))
зы Можно конечно свои коллекции использовать, но хочется узнать как это делается на стандартных списках.
Здравствуйте, 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())
{
}
Здравствуйте, 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())
...
Здравствуйте, samius, Вы писали:
K>>Простой вопрос: K>> Как проверить у перечислимого типа или списка или другого массива, что он не равен null и не пустой одним действием? K>> Т.е. надоело писать: K>> if (myCollection != null && myCollection.Count > 0) K>> хочется как-то так: K>> if (List.IsNullOrEmpty(myCollection))
S>что мешает написать extension method?
Религия
К тому же придется этот экстеншн писать в каждом проекте.
Здравствуйте, Keith, Вы писали:
K>Здравствуйте, samius, Вы писали:
S>>что мешает написать extension method?
K> Религия K> К тому же придется этот экстеншн писать в каждом проекте.
Остается пожелать допускать поменьше ситуаций, где коллекция может быть null. Тогда и проверять на пустоту будет проще стандартными средствами.
Здравствуйте, Kore Sar, Вы писали:
K>> И носить этот класс из проекта в проект? K>> Неужели стандартных средств нет?
KS>Стандартные тоже есть! Смотри пример:
KS>
Здравствуйте, Keith, Вы писали:
K> Это само собой, но на всякий случай удобно было бы подстаховаться. K> Ну ладно, раз стандартных средств нет, то буду писать так и ожидать исключений: K> if (myList.Count > 0) K> ...
K> Спасибо
Обычно в таких случаях (подстраховаться) в начале метода пишут проверку допустимых значений параметров. В данном случае проверка myList на null и удобоваримое ArgumentNullException.
Здравствуйте, 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.
Здравствуйте, _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>А при чём тут линк и то, что его методы возвращают?
Не при чем, просто соглашение удобное.
Здравствуйте, gandjustas, Вы писали:
K>>>> Как проверить у перечислимого типа или списка или другого массива, что он не равен null и не пустой одним действием? G>>>Все методы Linq, которые возвращаюют последовательности никогда не возвращают null. G>>>Советую и вам такого соглашения придерживаться. _FR>>А при чём тут линк и то, что его методы возвращают? G>Не при чем, просто соглашение удобное.
Соглашение без спора удобное и придерживаться-то его, несомненно, нужно, но не в этом месте.
Придерживаться этого соглашения следует при возврате значений из методов или свойств. Но, например, при проверке аргументов, с которыми был вызван ваш метод, рассчитывать на соблюдение данного соглашения не стоит (кстати сказать, именно так поступает и сам линк). Потому что передаваться в метод может, например, не результат вызова другого метода, а значение локальной переменной, в котором может быть всё что угодно.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, 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.
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, Keith, Вы писали:
K>>Простой вопрос: K>> Как проверить у перечислимого типа или списка или другого массива, что он не равен null и не пустой одним действием? K>> Т.е. надоело писать: K>> if (myCollection != null && myCollection.Count > 0) K>> хочется как-то так: K>> if (List.IsNullOrEmpty(myCollection))
K>> зы Можно конечно свои коллекции использовать, но хочется узнать как это делается на стандартных списках.
_FR>У меня есть библиотечка, в которой есть класс Argument с набором методов (в том числе):
Здравствуйте, 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.
Здравствуйте, _FRED_, Вы писали:
_FR>C Code Contracts под 2008 (Pex, ты его имеешь в виду?) у меня загогулина выходит — WPF приложение не собирается (что-то не могу сейчас ссылку отыскать на описание, что-то там с билд-таргетами путается).
Здравствуйте, Аноним, Вы писали:
_FR>>C Code Contracts под 2008 (Pex, ты его имеешь в виду?) у меня загогулина выходит — WPF приложение не собирается (что-то не могу сейчас ссылку отыскать на описание, что-то там с билд-таргетами путается).
А>наверное его имели ввиду А>Code Contracts library for .NET 3.5<br />
<span class='lineQuote level1'>А></span>
Ага, это я как-то пропустил, здесь всё работает
Help will always be given at Hogwarts to those who ask for it.