2010-01-06 5 views
5

Ich habe diese FunktionProblem mit impliziter Umwandlung und null

public static implicit operator MyClass(string v) { return new MyClass(v); } 

und schreiben var.myclass = null ;. Dies ruft den impliziten Operator auf und übergibt Null als String, was Chaos in meinem Code verursacht (ich benutze Reflektion und möchte keinen Sonderfall hinzufügen). Wie kann ich myclass = null schreiben, ohne den impliziten Operator zu verursachen?

Ich versuchte

public static implicit operator MyClass(string v) { return v == null ? null : new MyClass(v); } 

Schreiben Aber das führt zu einer Stackoverflow

+4

Ist MyClass eine Struktur? Welches Argument nimmt Ihr Konstruktor an? – SLaks

+0

Kannst du es stattdessen als expliziten Operator schreiben? –

+0

Ich kann Ihr Problem nicht reproduzieren; Sie haben wahrscheinlich etwas anderes falsch. – SLaks

Antwort

5

ich, dass Ihr Problem glauben, dass beide Seiten des ternären Operators der gleichen oder kompatible Typen sein müssen.

Versuchen Schreiben

if (v == null) 
    return null; 
else 
    return new MyClass(v); 

EDIT: Ich habe Ihr Problem nur reproduzieren kann, wenn ich MyClass eine Struktur bilden, wobei in diesem Fall Ihre Frage nicht möglich ist; Eine Struktur kann nicht null sein.

Bitte geben Sie weitere Details an.

+0

Sie denken an einen Kompilierzeitfehler, der behoben werden könnte, indem Sie ihn wie folgt ändern: return v == null? (MyClass) null: neu MyClass (v); Der Stapelüberlauf wird wahrscheinlich ein Laufzeitfehler sein, wo er den impliziten Operator rekursiv aufruft. –

+2

Es ist eine implizite Umwandlung - der Compiler fügt automatisch die '(MyClass)' – SLaks

+0

Es war eine Struktur. Hoppla. –