ReSharper: Null-Check ist immer eine falsche Warnung

8

Mit ReSharper 8.2 bekomme ich eine Warnung ("Ausdruck ist immer falsch") für den Null-Check in

%Vor%

aus NHibernate NullableDictionary . Warum ist das? Wenn ich es mit

versuche %Vor%

dann bekomme ich nicht die Warnung für Nullprüfungen auf T-Variablen wie erwartet.

Bearbeiten: Hier ist die Klassensignatur der verknüpften Quelle vereinfacht:

%Vor%     
user764754 20.12.2014, 14:06
quelle

1 Antwort

9

Es tritt auf, weil die Klasse IDictionary<TKey, TValue> implementiert; Die Warnung verschwindet, wenn Sie (vorübergehend) den Schnittstellenteil der Klassensignatur löschen.

Da der "Schlüssel" in der Standardklasse System.Collections.Generic.Dictionary niemals null sein kann (er wirft ArgumentNullException ), würde ich sagen, dass ReSharper eine falsche Annahme trifft.

Testen des Verhaltens:

Ich habe die Klasse in einem ansonsten leeren Projekt getestet und ausprobiert. Obwohl ReSharper den gesamten Code ausgegraut hat, wurde er zur Laufzeit noch ausgeführt.

Der graue Text zeigt an, dass ReSharper glaubt, dass die Logik immer in den Block else fallen wird, aber das ist eindeutig nicht der Fall, wenn Sie es verwenden.

Ein Fix, der Anmerkungen verwendet:

Um das Problem von ReSharper zu umgehen, indem standardmäßig angenommen wird, dass der Schlüssel nicht null sein kann, könnten Sie die JetBrains-Anmerkungen verwenden.

Fügen Sie einen Verweis auf die JetBrains-Annotations-Assembly hinzu. Für mich war dies der Ort:

  

C: \ Programme (x86) \ JetBrains \ ReSharper \ v8.2 \ Bin \ JetBrains.Annotations.dll

Fügen Sie dann am Anfang der Datei, in der die Klasse steht, eine using-Anweisung hinzu:

%Vor%

Markieren Sie nun diesen Parameter mit dem CanBeNull -Attribut und Sie werden sehen, dass ReSharper den Text nicht mehr grau ausgräbt:

%Vor%

    
Grant Winney 20.12.2014, 14:13
quelle

Tags und Links