Ich mache also eine Menge Datenbankarbeit in einer Anwendung - und es gibt mehrere mögliche Rückgabewerte meines Caching-Systems. Es kann null zurückgeben, es kann einen Standard (type) zurückgeben oder es kann ein ungültiges Objekt zurückgeben (durch ein ungültiges Objekt, ich meine eins mit falschen Eigenschaften / Werten). Ich möchte eine Erweiterungsmethode erstellen, um alle diese Prüfungen für mich zu machen, wie folgt:
%Vor% Das Problem ist, mein Compiler sagt mir, dass if (obj == default(T))
immer falsch ist.
Warum ist das so?
Da Sie eine Einschränkung für die Klasse haben ( where T: class
), ist default(T)
immer gleich null. Sie haben in der ursprünglichen if-Anweisung bereits eine Überprüfung dafür, sodass der zweite Fall ( obj == default(T)
) niemals wahr sein kann.
Ich bin mir nicht sicher, ob Sie es zum Unterricht zwingen, weil Sie wollen oder weil Sie das Gefühl haben, dass Sie es müssen. Wenn es das Letztere ist, ist hier eine Möglichkeit, die Überprüfung von Standardwerten für komplexe und einfache Typen durchzuführen:
%Vor%Wenn Ihre Entscheidung, ob sie nur auf die Klasse beschränkt ist, beabsichtigt war oder für einen Geschäftsfall, können Sie diesen Vorschlag ignorieren. Eine andere Sache, die dies nicht berücksichtigen kann, ist das Boxen von einfachen Typen (obwohl ich in der Regel nullable einfache Typen heutzutage verwende, für die dieser Code funktioniert).
Tags und Links c# linq resharper null-check