У меня есть следующий код:
public static IEnumerable<long> GetAllCombinations(IEnumerable<long> elements)
{
Contract.Requires(elements != null);
return GetAllCombinations(elements.ToList(), 0);
}
Статический анализ теперь говорит мне добавить еще одно предварительное условие:
CodeContracts: Предлагаемое предварительное условие: Contract.Requires (максимум> = 0)
Я не понимаю предложение, потому что
a) Если я уже проверяю, что elements не равно NULL, зачем мне проверять, равно ли его количествобольше или равно нулю?Я имею в виду, что передача ненулевого значения уже означает, что оно содержит как минимум нулевые элементы?
б) Как я должен проверить количество (или максимум, как предлагается) IEnumerable?Единственный способ, которым я вижу, - это присвоить elements.ToList()
дополнительной переменной и проверить эту переменную.Но что, если я никогда не захочу составить список из IEnumerable?
Смущает меня.
EDIT:
Iзнаю все методы расширения для IEnumerable<T>
и хорошо знаю .Any()
, .Count()
и т. д.
Что меня удивляет, так это сообщение от статического анализатора.Кто-нибудь может объяснить, почему в нем говорится Contract.Requires(maximum >= 0)
?
Означает ли это, что я думаю (проверка количества элементов> = 0)?
И, как уже упоминалось в комментарии, почему статический анализатор все еще не удовлетворен Contract.Requires(elements.Any());
?