我已经学会了为我的类使用隐式运算符。
现在我想做这样的事情:
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
答案 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()
)。