Рассмотрим следующий код:
public static void Foo()
{
Bar(null);
}
public static void Bar([NotNull] string s)
{
if (s == null)
throw new ArgumentNullException("s");
}
Атрибут [NotNull]
используется для Bar
, чтобы сообщить вызывающим абонентам, что s
не должно быть нулевым. Это работает нормально, и я получаю предупреждение, когда передаю null в Bar
(Возможное присвоение 'null' объекту, отмеченному атрибутом 'NotNull').
Но на самом деле это не мешает мне передавать значение null, поэтому Bar
все равно должен проверять, является ли s
значением null. Так почему же я также получаю предупреждение if (s == null)
( Expression is always false)?
Насколько я могу судить, этот атрибут имеет неоднозначное значение; в зависимости от контекста это может означать две разные вещи:
Я использую это атрибут правильно, или я что-то упускаю?
Кстати, я использую Resharper 7 EAP, так что это может быть ошибкой; однако я хочу убедиться, что мое использование правильно, прежде чем сообщить об этом...
РЕДАКТИРОВАТЬ: только что попробовал то же самое с R # 5.1 на работе; он показывает предупреждение на сайте вызова, но не в методе. Я сообщу об этом на Youtrack Jetbrain.
EDIT2: сообщение об ошибке здесь