СА1062:ValidateArgumentsOfPublicMethods при вызовах соконструктора

StackOverflow https://stackoverflow.com/questions/1059654

Вопрос

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

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

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

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

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

Это было полезно?

Решение

Так?

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

Другие советы

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

Поскольку этот вопрос был задан некоторое время назад, я просто хочу отметить, что с более поздними функциями C# теперь вы также можете использовать это:

public MyClass(SomeOtherClass source) : this(source, source?.Name) { }

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top