2010-01-24 5 views
8

Considérez le code suivant:Utilisation des constantes de chaîne dans la conversion implicite

public class TextType { 

    public TextType(String text) { 
     underlyingString = text; 
    } 

    public static implicit operator String(TextType text) { 
     return text.underlyingString; 
    } 

    private String underlyingString; 
} 

TextType text = new TextType("Something"); 
String str = text; // This is OK. 

Mais je veux pouvoir faire ce qui suit, si possible.

TextType textFromStringConstant = "SomeOtherText"; 

Je ne peux pas étendre la classe String avec la surcharge de l'opérateur implicite TextType, mais est-il possible d'assigner une chaîne littérale à une autre classe (qui est gérée par une méthode ou quelque chose)?

La chaîne est un type de référence. Lorsqu'ils ont développé C#, ils devaient évidemment utiliser un chemin pour obtenir une chaîne littérale pour la classe. J'espère juste que ce n'est pas codé en dur dans la langue.

+0

Voir la section 10.10.3 de la spécification pour plus de détails. –

Répondre

9
public static implicit operator TextType(String text) { 
    return new TextType(text); 
} 
+0

Correction du texte! = Valeur - vous étiez plus rapide si :) –

+1

Je ne peux pas croire à quel point j'ai manqué que les surcharges de l'opérateur va dans les deux sens. J'ai eu le sentiment que la méthode devrait appartenir à la classe String ... Merci. –

6

Ajouter

public static implicit operator TextType(string content) { 
    return new TextType(content); 
} 

à votre classe? :)

Questions connexes