visual valid net name generate example comment comentarios code c# code-analysis

valid - xml comments c#



C#Code Analysis CA1822 Advertencia-¿Por qué? (5)

Tengo el método que se muestra a continuación que genera una advertencia de análisis de código CA1822. CA1822 dice esto:

"The ''this parameter (or ''Me'' in Visual Basic) of ''ImportForm.ProcessFile(StreamReader)'' is never used. Mark the member as static (or Shared in Visual Basic) or use ''this/Me'' in the method body or at least one property accessor, if appropriate."

¿Alguien puede decirme por qué recibo esta advertencia, ya que en realidad se está utilizando el parámetro ''lector''?

private void ProcessFile(StreamReader reader) { string[] lines; lines = reader.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.None); ParseFile.IVAFile(lines); }


Creo que está tratando de decirte que este método puede hacerse estático.

Lo único a lo que este método debe acceder es el "lector", pero nada de la instancia de clase a la que pertenece ("este"). En cuyo caso, puedes hacerlo con seguridad estático.


La advertencia se produce porque no utiliza ninguna variable miembro de esa clase en ese método. P.ej

this.m_anyVariable = anyValue;

Por lo tanto, puedes / debes marcar ese método como estático.


Significa que no usas miembros del objeto. Todos los elementos en el método provienen de los parámetros.

Por lo tanto, el método se puede hacer con seguridad estático.


Tal vez he encontrado el comportamiento malicioso de este mensaje.

En una situación como

void Print() { Console.Writeline(GetType().Name); }

Obtengo este CA1822 informado, aunque GetType() es un método de instancia. Sin embargo, encontré alguna Explicación, por qué GetType() realidad no es un método virtual, no es un método en su lugar y se comporta técnicamente como un método estático.

Es solo que el análisis de código no considera este comportamiento especial.


se está utilizando "reader", pero no está utilizando "this" en ninguna parte, por lo que puede hacer que el método sea estático.

La única razón para no hacerlo estático sería si desea utilizar el polimorfismo más adelante, por ejemplo, hacerlo virtual y anularlo en otro lugar.