CA1062: ValidateArgumentsOfPublicMethods em chamadas co-construtor
-
21-08-2019 - |
Pergunta
Eu tenho uma classe com dois construtores que olhar como esta:
public MyClass(SomeOtherClass source) : this(source, source.Name) { }
public MyClass(SomeOtherClass source, string name) { /* ... */ }
Quando eu executo FxCop, ele relata corretamente uma violação dos CA1062: ValidateArgumentsOfPublicMethods , porque se source
é null
no primeiro construtor, ele irá lançar um NullReferenceException
em source.Name
.
Existe alguma maneira de corrigir este aviso?
Eu poderia fazer um método de extensão que verifica nulo e retorna seu argumento, mas que seria feio. Além disso, como eu entendo, não iria resolver o aviso porque FxCop não iria perceber o que ele faz.
Solução
Assim?
public MyClass(SomeOtherClass source) : this(source, source == null ? null : source.Name) { }
public MyClass(SomeOtherClass source, string name) { /* ... */ }
Outras dicas
Há momentos legítimos para desligar avisos FxCop e isso poderia muito bem ser um, mas você pode corrigir o problema seja uma expressão ternária que verifica nula e lança uma exceção (ou substitui um valor padrão) ou uma chamada a um método estático que verifica nula e lança a exceção apropriada.
Uma vez que esta pergunta foi feita há algum tempo atrás eu só quero nota com as características posteriores em C # agora você pode também usar este:
public MyClass(SomeOtherClass source) : this(source, source?.Name) { }
Eu diria que a única maneira de corrigir este aviso seria desligá-lo. FxCop é uma ótima ferramenta, mas às vezes é preciso lembrar que é apenas uma ferramenta e pode fazer sugestões que nem sempre são ajustadas ao seu código.
Neste exemplo, eu diria que ignorar o aviso ou desativá-lo se você não quiser vê-lo.