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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top