Поскольку это решает проблему и до сих пор не так уродлив, как можно было бы подумать сначала, я отправляю его в качестве ответа (если у Вас есть идеи получше, я открыт для ваших предложений, хотя):
static public int Q()
{
var e = Enumerable.Range(0, 100)
.Select(i => i);
Contract.Assume(e.Any());
return e.First();
}
Поэтому мне не нужно было разделять целое выражение, но часть, которую статический анализатор боялся, и для этой части я мог бы заверить, что это «все хорошо, поверьте мне, я знаю, что я делаю» ,
Примечание:
по какой-то причине ни
Contract.Assert(e.Count() > 0);
или
Contract.Assert(e.Any());
работы.
Важно: а упоминать других людей, это может быть не подходит для всех случаев, поскольку дополнительный e.Any()
вызов будет осуществляться сбор, который может быть нежелательным в некоторых случаях (например, когда это LINQ от 3 участника источник).
в этом коде, почему вы используете метод выбора ... Этот метод используется, когда вы хотите, чтобы преобразовать источник в новой форме – Viru
@Viru это минимальный жизнеспособный пример созданного специально для демонстрации проблемы. В реальном коде есть целые методы LINQ. – zerkms
@Szeki https://github.com/Microsoft/CodeContracts – zerkms