Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#代码分析CA1822警告-为什么?_C#_Code Analysis - Fatal编程技术网

C#代码分析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

我有如下所示的方法,生成CA1822代码分析警告。CA1822说:

“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
?这是否会删除警告?