Возможно, неверный совет «Возможное исключение System.NullReferenceException» в Resharper - PullRequest
2 голосов
/ 16 марта 2011

Я хочу перебрать список и получить значения текста метки. Все работает отлично, по-видимому, ожидайте по совету Resharper. Код:

string someString = GetLocalResourceObject(GetNameAsResource(resourceKey)) != null ?
                GetLocalResourceObject(GetNameAsResource(resourceKey)).ToString() :
                parametro.Parametro.Nome;

А в GetLocalResourceObject(GetNameAsResource(resourceKey)).ToString() Решарпер предлагает: возможно 'System.NullReferenceException' Я делаю что-то не так или Resharper просто не распознает предыдущую нулевую проверку?

Tks

1 Ответ

6 голосов
/ 17 марта 2011

Поскольку GetLocalResourceObject() является методом , ReSharper не знает, что возвращаемое значение из второго вызова будет таким же, как возвращаемое значение из первого вызова!Сделайте это:

var resourceObject = GetLocalResourceObject(GetNameAsResource(resourceKey));
string someString = 
    resourceObject != null 
    ? resourceObject.ToString() 
    : parametro.Parametro.Nome;

, и предупреждение исчезнет, ​​потому что теперь ReSharper знает, что resourceObject проверен на ничтожность, прежде чем вызывать метод для него.

Возможно, было бы лучшечтобы взглянуть на шаблон нулевого объекта - то есть в случае, когда GetLocalResourceObject в настоящее время возвращает null, пусть вместо этого он возвращает фактический объект, который представляет «нет ресурса».Тогда вам вообще не понадобится эта проверка недействительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...