CA1062: ValidateArgumentsOfPublicMethods для вызовов совместного конструктора - PullRequest
8 голосов
/ 29 июня 2009

У меня есть класс с двумя конструкторами, которые выглядят так:

public MyClass(SomeOtherClass source) : this(source, source.Name) { }
public MyClass(SomeOtherClass source, string name) { /* ... */ }

Когда я запускаю FxCop, он правильно сообщает о нарушении CA1062: ValidateArgumentsOfPublicMethods , потому что, если source равно null в первом конструкторе, он выдаст NullReferenceException в source.Name.

Есть ли способ исправить это предупреждение?

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

Ответы [ 3 ]

10 голосов
/ 29 июня 2009

Как это?

public MyClass(SomeOtherClass source) : this(source, source == null ? null : source.Name) { }
public MyClass(SomeOtherClass source, string name) { /* ... */ }
1 голос
/ 29 июня 2009

Существуют допустимые времена для отключения предупреждений FxCop, и это вполне может быть одно, но вы можете исправить проблему либо с помощью троичного выражения, которое проверяет на нулевое значение и выдает исключение (или заменяет значение по умолчанию), либо с помощью вызова статическому методу, который проверяет нулевое значение и выдает соответствующее исключение.

0 голосов
/ 29 июня 2009

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

В этом примере я бы сказал, игнорировать предупреждение или отключить его, если вы не хотите его видеть.

...