46 Stimmen

C# Code Analyse CA1822 Warnung - Warum?

Ich habe die unten gezeigte Methode, die eine CA1822-Codeanalysewarnung erzeugt. CA1822 sagt dies:

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

Kann mir jemand sagen, warum ich diese Warnung erhalte, da der Parameter "reader" tatsächlich verwendet wird?

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

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

   ParseFile.IVAFile(lines);
}

59voto

Jeff Foster Punkte 41930

Es bedeutet, dass Sie keine Mitglieder des Objekts verwenden. Alle Elemente in der Methode stammen aus den Parametern.

Daher kann die Methode sicher statisch gemacht werden.

24voto

Jon Skeet Punkte 1325502

"reader" wird verwendet, aber Sie verwenden nirgendwo "this", so dass Sie die Methode statisch machen können.

Der einzige Grund no statisch zu machen, wäre, wenn Sie später Polymorphismus verwenden wollen - z.B. indem Sie es virtuell machen und es an anderer Stelle überschreiben.

5voto

Holger Punkte 2316

Vielleicht habe ich ein bösartiges Verhalten dieser Nachricht gefunden.

In einer Situation wie

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

Ich bekomme dies CA1822 berichtet, obwohl GetType() ist eine Instanzmethode. Ich habe jedoch einige Erklärungen gefunden, warum GetType() ist eigentlich keine virtuelle Methode, keine Ersatzmethode und verhält sich technisch gesehen wie eine statische Methode.

Es ist nur so, dass der Code Analysis dieses besondere Verhalten nicht berücksichtigt.

4voto

Simon Linder Punkte 3328

Die Warnung tritt auf, weil Sie keine Mitgliedsvariablen dieser Klasse in dieser Methode verwenden. Z.B..

this.m_anyVariable = anyValue;

Daher können/sollten Sie diese Methode als statisch kennzeichnen.

2voto

Rob Levine Punkte 38688

Ich glaube, es will Ihnen sagen, dass diese Methode statisch gemacht werden kann.

Das einzige, worauf diese Methode zugreifen muss, ist "reader", aber nichts von der Klasseninstanz, zu der sie gehört ("this"). In diesem Fall können Sie sie sicher statisch machen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X