3

我已经学会在我的类中使用隐式运算符。

现在我想做这样的事情:

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
4

3 回答 3

6

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

您得到的编译器错误对此非常明确:

用户定义的转换必须与封闭类型相互转换

所以,你在这里想要达到的目标是不可能的。
您最好的选择可能是int执行转换并返回string.

于 2013-07-22T10:45:54.903 回答
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);

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

textbox1.SetText(DateTime.Now);
于 2013-07-22T11:00:54.893 回答
1

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

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

于 2013-07-22T10:47:08.940 回答