Frage

so etwas wie

public static class StringHelpers
{
    public static char first(this string p1)
    {
        return p1[0];
    }

    public static implicit operator Int32(this string s) //this doesn't work
    {
        return Int32.Parse(s);
    }
}

also :

string str = "123";
char oneLetter = str.first(); //oneLetter = '1'

int answer = str; // Cannot implicitly convert ...
War es hilfreich?

Lösung

Nein, es gibt nicht so etwas wie Erweiterung Operatoren (oder Eigenschaften etc.) - nur Erweiterung Methoden

Das C # Team hat es betrachtet - gibt es verschiedene interessante Dinge, die man (man stelle Erweiterung Bauer) tun könnte - aber es ist nicht in C # 3.0 oder 4.0. Siehe Eric Lippert Blog weitere Informationen (wie immer).

Andere Tipps

Leider ist C# nicht erlauben Sie hinzufügen Betreiber alle Typen, die Sie nicht besitzen.Ihre Methode ist so nah wie Sie gehen zu bekommen.

  /// <summary>
    /// 
    /// Implicit conversion is overloadable operator
    /// In below example i define fakedDouble which can be implicitly cast to touble thanks to implicit operator implemented below
    /// </summary>

    class FakeDoble
    {

        public string FakedNumber { get; set; }

        public FakeDoble(string number)
        {
            FakedNumber = number;
        }

        public static implicit operator double(FakeDoble f)
        {
            return Int32.Parse(f.FakedNumber);
        }
    }

    class Program
    {

        static void Main()
        {
            FakeDoble test = new FakeDoble("123");
            double x = test; //posible thanks to implicit operator

        }

    }

Was Sie versuchen, in Ihrem Beispiel zu tun (die Definition eines impliziten Betrieb von String int) ist nicht erlaubt.

Da eine Operation (implizit oder explizit) nur in der Klassendefinition des Ziels oder Zielklasse definiert werden, können Sie Ihre eigenen Operationen zwischen Rahmentypen nicht definiert werden.

Ich denke die beste Wahl ist so etwas wie folgt aus:

public static Int32 ToInt32(this string value)
{
    return Int32.Parse(value);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top