Pregunta

Tengo una clase con dos constructores que se ven así:

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

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

¿Hay alguna forma de solucionar esta advertencia?

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

¿Fue útil?

Solución

¿Así?

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

Otros consejos

Hay veces 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 comprueba nula y lanza la excepción apropiado.

Dado que esta pregunta se hizo hace algún tiempo sólo quiero tomar nota con las funciones más adelante en C # ahora se puede también utilizar esto:

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

Yo diría que la única manera de solucionar esta advertencia sería para apagarlo. FxCop es una gran herramienta, pero a veces hay que recordar que es sólo una herramienta y puede hacer sugerencias que no siempre son apropiadas para su código.

En este ejemplo, diría ignorar la advertencia o deshabilitarlo si no quieres verlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top