Не могу написать строку в конструкторе исключений - PullRequest
2 голосов
/ 16 февраля 2009

Кажется, Visual Studio жалуется, когда я передаю строку в параметр исключения.

if (str1 == null || str2 == null)
{
    throw new ArgumentNullException("lmkl");
}

Visual Studio говорит, что не может разрешить символ "lmkl".

Если у меня есть строковая переменная (например, выше throw new... string s = "test";) и я включил ее в качестве параметра для исключения, Visual Studio будет более чем доволен этим.

Что дает?

Спасибо

Ответы [ 3 ]

7 голосов
/ 16 февраля 2009

На самом деле Visual Studio вообще не заботится об этом . Я полагаю, у вас установлена ​​ ReSharper ? Это проверяет множество распространенных ошибок, в том числе некорректное использование шаблонов, таких как ArgumentException и т. Д. Кроме того, имеет лучшую null проверку - не совсем "контракты", но все же довольно полезные.

Он пытается сделать это только тогда, когда видит строковый литерал, используемый в известном шаблоне - анализ, чтобы преследовать то, как вы назначаете переменные, просто слишком сложен для реалистичного анализа.

7 голосов
/ 16 февраля 2009

Документация для перегруженного конструктора для ArgumentNullException, который принимает один строковый параметр, утверждает, что этот аргумент должен быть:

The name of the parameter that caused the exception.

В настоящий момент, если ваш код выдает исключение, вы не будете знать, какой аргумент был нулевым.

Рекомендую переписать на

if (str1 == null) throw new ArgumentNullException("str1");
if (str2 == null) throw new ArgumentNullException("str2"); 
0 голосов
/ 19 июня 2016

Если вы используете ReSharper, это должно подавить предупреждение (при условии, что str1 - имя вашего параметра):

throw new ArgumentNullException(nameof(str1));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...