2009-06-29 9 views
8

que tienen una clase con dos constructores que se ven así:CA1062: ValidateArgumentsOfPublicMethods en co-constructor llama

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

Cuando corro FxCop, correctamente informa de una violación de CA1062: ValidateArgumentsOfPublicMethods, porque si source es null en el primer constructor, lanzará un NullReferenceException en source.Name.

¿Hay alguna manera de corregir esta advertencia?

Podría hacer un método de extensión que compruebe nulo y devuelva su argumento, pero sería feo. Además, según tengo entendido, no resolvería la advertencia porque FxCop no se daría cuenta de lo que hace.

Respuesta

10

¿Te gusta?

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

Sí, eso es todo. Puedes usar cualquier método estático también. – Groo

0

Yo diría que la única manera de corregir esta advertencia sería apagarla. FxCop es una gran herramienta, pero a veces debe recordar que es solo una herramienta y puede hacer sugerencias que no siempre se ajustan a su código.

En este ejemplo, diría ignorar la advertencia o deshabilitarla si no desea verla.

1

Hay momentos legítimos para desactivar las advertencias FxCop y esto podría muy bien ser uno, pero se puede corregir el problema, ya sea una expresión ternaria que comprueba nula y se produce una excepción (o sustituye un valor por defecto) , o una llamada a un método estático que busca nulo y arroja la excepción apropiada.