Validieren des C # -Basisklassenkonstruktorparameters

8

Nach dem Ausführen der Codeanalyse in VS2010 Beta (FxCop für frühere Versionen) erhalte ich die folgende Warnung:

  

In extern sichtbarer Methode   'Identity.Identity (WindowsIdentity)',   validiere Parameter 'windowsIdentity'   bevor Sie es verwenden.

Der Konstruktor ist:

%Vor%

für eine Klasse definiert als:

%Vor%

Meine Frage ist, wie validiere ich den windowsIdentity-Parameter? Sollte ich es im Konstruktor validieren und eine Ausnahme auslösen, oder gibt es eine bessere Möglichkeit, dies aufzurufen?

    
Steve 17.12.2009, 19:09
quelle

5 Antworten

12

Sie können es in einer statischen Methode validieren:

%Vor%

(Ich habe nicht nach dem Typ von WindowsIdentity.Token gesucht, aber Sie bekommen die Idee)

    
Sander Rijken 17.12.2009, 19:18
quelle
2

Ich glaube, FXCop meldet diesen Fehler hier, weil er denkt, dass Sie eine NullReferenceException durch Zugriff auf windowsIdentity beim Aufrufen des Basisklassenkonstruktors finden könnten.

Eine Möglichkeit zum Hinzufügen einer Validierungsprüfung für null wäre das Hinzufügen einer statischen privaten Funktion zu Ihrer Klasse, die den WindowsIdentity-Parameter auf null überprüfen und entsprechende Maßnahmen ergreifen kann:

%Vor%

Ein anderer Ansatz wäre, den ternären Operator zu verwenden, um den Parameter zu verifizieren, wie in:

%Vor%

Aber was sollten Sie sich wirklich fragen, was würden Sie tun? Wenn Sie einfach eine Ausnahme auslösen, ist es in Ordnung, den Code unverändert zu lassen, da er bereits durch NullReferenceException geht, wenn das Argument null ist.

    
LBushkin 17.12.2009 19:16
quelle
1

Es beschweren sich, weil wenn Sie NULL als windowsIdentity übergeben, dann, wenn der Konstruktor an die Basisklasse kettet, eine Null-Referenzausnahme ausgelöst wird.

Der beste Weg, damit umzugehen, hängt von Ihrem Design ab. Sie könnten es wie folgt auf null überprüfen:

%Vor%

Oder Sie könnten einen anderen Konstruktor im Basisklassenkonstruktor erstellen, der eine WindowsIdentity als Parameter akzeptiert und diesen Konstruktor diesen Teil der Validierung ausführt. Grundsätzlich gibt es Unmengen von Möglichkeiten, um damit umzugehen, verwenden Sie einfach, was am besten in Ihrer Situation funktioniert.

    
dan 17.12.2009 19:16
quelle
1

Ab C # 6.0 können Sie null-coalescing-Operator verwenden kombiniert mit dem nullbedingten Operator so:

%Vor%     
Jogge 14.11.2017 10:31
quelle
0

FX-Cop sagt Ihnen, dass der Parameter nicht Null sein kann. Wenn Sie ihn also wirklich brauchen, sollten Sie ihn irgendwie validieren. Da du es im Konstruktor verwendest, willst du wahrscheinlich einen anderen Wert als null haben, also solltest du es dort für FX Cop testen, damit du nicht mehr nervst ..

Wenn Sie einen Konstruktor mit null benötigen, sollten Sie einen anderen Konstruktor ohne Parameter haben.

Wenn Sie es nicht verwenden oder an einem anderen Punkt validieren, können Sie die Warnung überspringen.

Um das Problem mit FXcop zu vermeiden, sollten Sie ArgumentNullException werfen.

    
gbianchi 17.12.2009 19:21
quelle

Tags und Links