开发者

C# Code Analysis CA1822 Warning - Why?

I have the method shown below which is generating a CA1822 Code Analysis warning. CA1822 says this:

"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."

Can anyone tell me why I am getting this warning, since the 'reader' parameter is in fact being used?

private void ProcessFile(Stre开发者_如何转开发amReader reader)
{
   string[] lines;

   lines = reader.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

   ParseFile.IVAFile(lines);
}


It means you use no members of the object. All the items in the method come from the parameters.

Therefore the method can safely be made static.


"reader" is being used, but you're not using "this" anywhere, so you can make the method static.

The only reason not to make it static would be if you want to use polymorphism later - e.g. making it virtual and overriding it elsewhere.


The warning occurs because you don't use any member variables of that class in that method. E.g.

this.m_anyVariable = anyValue;

Therefore you can/should mark that method as static.


Maybe I have found malicious behavior of this message.

In a Situation like

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

I get this CA1822 reported, although GetType() is an instance method. However, I found some Explanation, why GetType() is actually not a virtual method, not an instead method, and technicly behaving like a static method.

It's just that the code Analysis does not consider this special behavior.


I think it is trying to tell you that this method can be made static.

The only thing this method needs to access is "reader", but nothing from the class instance to which it belongs ("this"). In which case, you can safely make it static.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜