Учитывая следующий код, Resharper правильно предупредит меня о возможном NullReferenceException
на foo.Bar
, потому что в перечисляемом могут быть нулевые элементы:
IEnumerable<Foo> foos = GetFoos();
var bars = foos.Select(foo => foo.Bar);
Один из способов удовлетворить статический анализатор - явно исключить null:
IEnumerable<Foo> foos = GetFoos().Where(foo => foo != null);
Я нахожу, что набираю .Where(x => x != null)
много, поэтому я завернул его в метод расширения, и теперь могу сделать следующее:
IEnumerable<Foo> foos = GetFoos().NotNull();
Проблема заключается в том, что Resharper не знает, что NotNull()
удаляет нули. Есть ли способ научить Решарпера об этом факте? В общем, есть ли способ сказать Resharper, что метод IEnumerable
-returning никогда не будет иметь нулей в нем (так что я могу просто аннотировать GetFoos()
напрямую)?
Я знаю, что могу использовать NotNullAttribute
, чтобы сообщить Resharper, что перечисляемый сам не является нулевым, но я не могу найти тот, который говорит о содержании перечислимый.
Изменить: Метод расширения выглядит точно так, как вы ожидали:
[NotNull]
public static IEnumerable<T> NotNull<T>(this IEnumerable<T> enumerable)
{
return enumerable.Where(x => x != null);
}