2010-01-06 7 views
5

J'ai cette fonctionproblème avec la conversion implicite et nulle

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

et écrire var.myclass = null ;. Cela appelle l'opérateur implicite et passe null comme une chaîne, ce qui provoque des ravages dans mon code (j'utilise la réflexion et je n'aimerais pas ajouter un cas particulier). Comment puis-je écrire myclass = null sans provoquer l'opérateur implicite?

J'ai essayé d'écrire

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

Mais cela provoque une stackoverflow

+4

Ma classe est-elle une structure? Quel argument votre constructeur prend-il? – SLaks

+0

Pouvez-vous l'écrire en tant qu'opérateur explicite à la place? –

+0

Je ne peux pas reproduire votre problème; vous avez probablement quelque chose d'autre qui ne va pas. – SLaks

Répondre

5

Je crois que votre problème est que les deux côtés de l'opérateur ternaire doivent être des types identiques ou compatibles.

écriture Essayez

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

EDIT: Je ne peux reproduire votre problème si je fais MyClass un struct, dans ce cas, votre question est impossible; une structure ne peut pas être nulle.

Veuillez fournir plus de détails.

+0

Vous pensez à une erreur de compilation, qui serait corrigée en la changeant en: return v == null? (MyClass) null: nouveau MyClass (v); Le dépassement de pile est susceptible d'être une erreur d'exécution, où il appelle l'opérateur implicite récursivement. –

+2

C'est un cast implicite - le compilateur insère automatiquement le '(MyClass)' – SLaks

+0

C'était une struct. Oops. –

Questions connexes