Keine Erweiterungsmethode prüfen

8

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?

    
caesay 08.02.2012, 17:33
quelle

3 Antworten

21

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.

    
Reed Copsey 08.02.2012, 17:35
quelle
1

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).

    
Brittonlj 26.03.2012 19:23
quelle
0

Die erste Entscheidung, die Sie treffen müssen, ist: Kann T ein Werttyp wie int sein? Wenn ja, können Sie

entfernen %Vor%

und

%Vor%

Wenn T immer ein Referenztyp ist, können Sie

entfernen %Vor%     
brgerner 09.02.2012 16:17
quelle

Tags und Links