Требуется разъяснение значения атрибута Resharper NotNullAttribute

Рассмотрим следующий код:

    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: сообщение об ошибке здесь

12
задан Thomas Levesque 22 May 2012 в 10:03
поделиться