views:

335

answers:

4

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(StreamReader reader)
{
   string[] lines;

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

   ParseFile.IVAFile(lines);
}
+5  A: 

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.

Jeff Foster
+2  A: 

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

Jon Skeet
A: 

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.

Rob Levine
A: 

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.

Simon Linder