Was ist ein wartbarer Weg, um festzustellen, ob ein Wert auf den Standardwert des Typs gesetzt ist?

8

Sagen Sie, ich habe einen Code wie den folgenden:

%Vor%

Ich möchte dann feststellen, ob result der Standardwert war. Ich möchte dies jedoch in einer wartbaren Weise tun, so dass der Rest des Codes nicht geändert werden muss, wenn sich der Elementtyp von someCollection ändert.

Die Art und Weise, wie dies typischerweise (im allgemeinen Sinne) zu geschehen scheint, ist result == null . In diesem Fall ist der Typ natürlich kein Referenztyp, daher funktioniert das nicht.

Eine Verbesserung, die diese Annahme vermeidet, ist result == default(int) . Wenn Sie jedoch den Elementtyp ändern, müssen Sie auch das Argument in default ändern, sodass die Anforderung, nur den Typ an einer Stelle zu ändern, immer noch nicht erfüllt ist.

Akzeptanzkriterien

  1. Integrierte Logik wird der benutzerdefinierten Logik vorgezogen.
  2. Eleganter und prägnanter Code wird bevorzugt.
  3. Effizienter Code ist bevorzugt. (Bei Referenztypen sollte nur ein Referenzvergleich stattfinden.)
Sam 05.03.2013, 23:30
quelle

3 Antworten

4

Sie können das Standard Schlüsselwort verwenden. Da Sie nicht wissen, was der Typ sein wird, können Sie Generika verwenden.

%Vor%     
keyboardP 05.03.2013, 23:36
quelle
3

Von Sam stehlen und es verbessern:

%Vor%

Keine Typüberprüfung erforderlich. Das JIT wird es funktionieren lassen, weil es weiß, was T zur JIT-Zeit ist.

  

Beachten Sie, dass, wenn der Typ Equals überschreibt, es möglicherweise false even sagt   wenn es default(T) ist, und es könnte auch dann wahr sein, wenn es nicht ist.   - kommentiert von Eric Lippert

    
usr 05.03.2013 23:35
quelle
2

Ich denke, das wird funktionieren.

%Vor%

Ich gehe jedoch davon aus, dass dies für Werttypen ihre überladenen Methoden Equals aufrufen wird, was ein Problem sein kann oder auch nicht.

    
Sam 05.03.2013 23:32
quelle

Tags und Links