C#代码分析CA1822警告-为什么?
我有如下所示的方法,生成CA1822代码分析警告。CA1822说:C#代码分析CA1822警告-为什么?,c#,code-analysis,C#,Code Analysis,我有如下所示的方法,生成CA1822代码分析警告。CA1822说: “ImportForm.ProcessFile(StreamReader)”中的“this参数(或Visual Basic中的“Me”)从未使用过。请将成员标记为静态(或在Visual Basic中共享),或在方法体中使用“this/Me”,或至少使用一个属性访问器(如果适用)。 有谁能告诉我为什么我会收到这个警告,因为实际上正在使用“reader”参数 private void ProcessFile(StreamReader
“ImportForm.ProcessFile(StreamReader)”中的“this参数(或Visual Basic中的“Me”)从未使用过。请将成员标记为静态(或在Visual Basic中共享),或在方法体中使用“this/Me”,或至少使用一个属性访问器(如果适用)。
有谁能告诉我为什么我会收到这个警告,因为实际上正在使用“reader”参数
private void ProcessFile(StreamReader reader)
{
string[] lines;
lines = reader.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
ParseFile.IVAFile(lines);
}
这意味着您不使用对象的任何成员。方法中的所有项都来自参数 因此,可以安全地将该方法设置为静态。正在使用“reader”,但您没有在任何地方使用“this”,因此可以将该方法设置为静态
不将其设置为静态的唯一原因是,如果您以后想使用多态性,例如,将其设置为虚拟并在其他位置覆盖它。我认为它试图告诉您,此方法可以设置为静态
这个方法只需要访问“reader”,但它所属的类实例(“this”)中没有任何内容。在这种情况下,可以安全地将其设置为静态。出现警告是因为在该方法中未使用该类的任何成员变量。例如
this.m_anyVariable = anyValue;
因此,您可以/应该将该方法标记为静态。可能我发现了此消息的恶意行为 在这样的情况下
void Print()
{
Console.Writeline(GetType().Name);
}
我得到了这个CA1822
报告,尽管GetType()
是一个实例方法。
然而,我找到了一些解释,为什么GetType()
实际上不是一个虚拟方法,不是一个替代方法,而且在技术上表现得像一个静态方法
<> P>只是代码分析不考虑这个特殊的行为。为什么这个方法应该被标记为静态的?有什么好处?啊,因为表现。从MSDN:将方法标记为静态后,编译器将向这些成员发出非虚拟调用站点。发出非虚拟调用站点将阻止在运行时对每个调用进行检查,以确保当前对象指针非空。这可以为性能敏感的代码实现可测量的性能增益。在某些情况下,无法访问当前对象实例表示存在正确性问题。“您是否尝试强制执行
this.GetType().Name
?这是否会删除警告?