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% 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: