int的隐式运算符?

时间:2013-07-22 10:42:26

标签: c# .net-3.5 implicit-conversion implicit

我已经学会了为我的类使用隐式运算符。

现在我想做这样的事情:

public static implicit operator string(int val)
{
    return "The value is: " + val.ToString(); // just an nonsense example
}

然而这是错误的。编译说:

  

用户定义的转换必须转换为封闭类型

我该如何解决这个问题?

我的目标是能够运行这样的代码:

int x = 50;
textbox1.Text = x; // without using .ToString() or casting

3 个答案:

答案 0 :(得分:6)

您不能在参数类或运算符的返回类型之外添加运算符 换句话说:您无法添加在两个您无法控制的类型之间进行转换的运算符。

你得到的编译器错误非常明确:

  

用户定义的转换必须转换为封闭类型

所以,你想在这里实现的目标根本不可能 您最好的选择可能是int上的扩展方法,它执行转换并返回string

答案 1 :(得分:2)

您可能想要考虑另一种方法。

您可以在Control上编写扩展方法,如下所示:

public static class ControlExt
{
    public static void SetText(this Control self, object obj)
    {
        self.Text = obj.ToString();
    }
}

然后你的代码将成为:

int x = 50;
textbox1.SetText(x);

它当然适用于任何类型,而不仅仅是ints:

textbox1.SetText(DateTime.Now);

答案 2 :(得分:1)

您需要将隐式运算符添加为类的成员。由于您无法控制int类;无法向int类添加隐式运算符。

您可以为int编写一个包装器,也可以创建一个新的扩展方法将int直接转换为字符串(已经定义为ToString())。