7

何かのようなもの

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);
    }
}

それで :

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

int answer = str; // Cannot implicitly convert ...
4

5 に答える 5

6

いいえ、拡張演算子(またはプロパティなど)のようなものはありません-拡張メソッドのみです。

C#チームはそれを検討しました-できることはさまざまです(拡張コンストラクターを想像してください)-しかし、C#3.0または4.0にはありません。詳細については、 Eric Lippertのブログを参照してください(いつものように)。

于 2009-11-24T18:40:36.700 に答える
2

残念ながら、C#では、所有していない型に演算子を追加することはできません。あなたの拡張方法はあなたが得ようとしているのとほぼ同じくらいです。

于 2009-11-24T18:40:34.953 に答える
2
  /// <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

        }

    }
于 2013-01-22T20:04:48.290 に答える
0

あなたがあなたの例でやろうとしていること(stringからintへの暗黙の操作を定義すること)は許可されていません。

操作(暗黙的または明示的)は、ターゲットまたは宛先クラスのクラス定義でのみ定義できるため、フレームワークタイプ間で独自の操作を定義することはできません。

于 2009-11-24T18:43:01.877 に答える
0

私はあなたの最善の策はこのようなものだと思っています:

public static Int32 ToInt32(this string value)
{
    return Int32.Parse(value);
}
于 2009-11-24T18:43:41.810 に答える