una - que significa ref en c#
CA1026(todos los parámetros deben tener valores predeterminados) y métodos de extensión (2)
No le advierte por no tener valores predeterminados para todos los parámetros, le advierte por usar parámetros opcionales.
Personalmente me gustaría deshabilitar esta advertencia en particular. Cuando se usa con cuidado, creo que los parámetros opcionales están bien. Debe pensar detenidamente en ellos, particularmente en cuanto a la versión del valor del parámetro predeterminado y en términos de idiomas que no los admiten (incluido C # antes de v4), pero en muchos entornos las desventajas realmente no son un problema, y puede terminar con un código mucho más simple que especificando sobrecargas en todo el lugar.
Premisa
Cuando utilice el análisis de código (o fxCop) con parámetros opcionales de C #, puede recibir una advertencia de CA1026 . La razón breve 1 para esto no es que todos los parámetros tengan un valor predeterminado.
La siguiente declaración genera correctamente esta advertencia.
public Color GetColor(bool red, bool blue = true, bool green = true)
Sin embargo, existe una situación en la que no se podrían suministrar todos los parámetros con un valor predeterminado, y eso es métodos de extensión. Así que la siguiente declaración genera la advertencia debido al primer parámetro:
public static bool ValidateRules(this string s, Rules rules = Rules.Default)
El compilador no le permitirá especificar un valor predeterminado en este parámetro, por lo que las dos únicas soluciones son:
- Ignore la advertencia, que no me gusta hacer porque conduce a malas prácticas.
- No uso métodos de extensión, lo que no me gusta hacer porque encuentro que los métodos de extensión hacen que el código sea más legible.
Preguntas
- ¿Son las dos opciones anteriores la única forma de resolver esto?
- ¿Es incorrecto fxCop / Code Analysis en su comprobación?
Puede suprimir la advertencia caso por caso.