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
  /// <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 回答
2

不幸的是,C# 不允许您将运算符添加到您不拥有的任何类型。您的扩展方法与您将要获得的一样接近。

于 2009-11-24T18:40:34.953 回答
0

不允许您在示例中尝试执行的操作(定义从字符串到 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 回答