C#代码分析CA1822警告 - 为什么?

Ran*_*der 34 c# code-analysis

我有下面显示的方法生成CA1822代码分析警告.CA1822说:

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

任何人都可以告诉我为什么我收到此警告,因为"读者"参数实际上正在使用?

private void ProcessFile(StreamReader reader)
{
   string[] lines;

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

   ParseFile.IVAFile(lines);
}
Run Code Online (Sandbox Code Playgroud)

Jef*_*ter 48

这意味着您不使用该对象的成员.方法中的所有项都来自参数.

因此,该方法可以安全地保持静态.


Jon*_*eet 18

正在使用"reader",但你并没有在任何地方使用"this",所以你可以使方法保持静态.

使它成为静态的唯一原因是如果你想稍后使用多态 - 例如将其设置为虚拟并在其他地方覆盖它.


Hol*_*ger 5

也许我发现了此消息的恶意行为。

在类似的情况下

void Print()
{
    Console.Writeline(GetType().Name);
}
Run Code Online (Sandbox Code Playgroud)

我得到了这个CA1822报告,尽管GetType()它是一个实例方法。但是,我发现了一些解释,为什么GetType()实际上不是虚拟方法,不是替代方法,并且在技术上表现得像静态方法。

只是代码分析并没有考虑这种特殊行为。