2010-01-24 10 views
8

Rozważmy następujący kod:Korzystanie Stałe łańcuchowe w niejawna konwersja

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. 

Ale chcę, aby być w stanie wykonać następujące czynności, jeśli to możliwe.

TextType textFromStringConstant = "SomeOtherText"; 

I nie można rozszerzyć klasę String z TextType niejawny przeciążenia operatora, ale czy jest jakiś sposób, aby przypisać ciągiem znaków do innej klasy (które jest obsługiwane przez metody lub coś)?

Łańcuch jest typem referencyjnym, więc gdy opracowali C#, musieli oczywiście użyć jakiegoś sposobu, aby uzyskać literał ciągów znaków dla klasy. Mam tylko nadzieję, że nie jest to zakodowane na stałe w tym języku.

+0

Szczegóły w sekcji 10.10.3 specyfikacji. –

Odpowiedz

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

Napraw tekst! = Wartość - byłeś jednak szybszy :) –

+1

Nie mogę uwierzyć, jak przeoczyłem to przeciążenie operatora. Miałem wrażenie, że metoda musiałaby należeć do klasy String ... Dzięki. –

6

Dodaj

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

do twojej klasie? :)