2017-04-06 1 views
0

Wir verwenden Erweiterungsmethoden, um beispielsweise eine leere Liste zurückzugeben, wenn die Liste null ist, um den Code ein wenig zu bereinigen. Ein vereinfachtes Beispiel ist unten enthalten.Funktionieren die ResHarper NotNull-Attribute für Erweiterungsmethoden?

Die Methode löst leider immer noch eine Warnung durch Resharper aus. Die Verwendung des NotNull-Attributs funktioniert in den meisten Fällen, jedoch nicht, wenn die Methode als Erweiterungsmethode verwendet wird.

Code Example. Image to include the squiggly lines from resharper.

I enthalten einen Screenshot die Wellenlinien zu zeigen. Beachten Sie die blaue Linie. Beachten Sie, wie das NotNull-Attribut das tut, was es tun soll, wenn die Methode nicht als Erweiterungsmethode aufgerufen wird, aber nicht, wenn sie auf diese Weise verwendet wird. Natürlich möchten wir die Methode gerne als Erweiterungsmethode bezeichnen.

Ist das nicht möglich? Gibt es ein anderes Attribut, das wir verwenden können?

(grüne Wellenlinie beschwert sich darüber, dass wir die Methode als Erweiterung Aufruf der Methode werden könnte.)

Antwort

2

Es ist, weil Sie einen ? (null-conditional) operator verwenden, die nicht Kette tut - es wird die Aussage kurzzuschließen, wenn Eingabe ist null. Wenn also die Eingabe null ist, wird die Liste zu null und list ausgewertet. Count wird eine nullreference-Ausnahme auslösen.

Sie können die ganze Sache in Klammern wickeln, wie

var list = (input?.List).EmptyIfNull(); 
+1

Dank. Es ist im Nachhinein so offensichtlich. Ich war nur so frustriert von etwas, das wie eine grelle imperativa Schwäche aussah. Froh, dass ich nur alte Tricks vergessen habe. – jarlelin

Verwandte Themen