我有一堂很简单的课:
public class MyCustomBoolean {
private bool _value = false;
public MyCustomBoolean(bool value) {
_value = value;
}
public bool value => _value;
#region casting support
public static explicit operator string(MyCustomBoolean m) {
return m.value.ToString();
}
public static explicit operator bool(MyCustomBoolean m) {
return m.value;
}
#endregion
}
现在,我尝试在代码中的某处:
public void someMethod(MyCustomBoolean param) {
string testString = param;
}
我一直收到的错误是:
cannot convert source type MyCustomBoolean to type string
我有几个处理不同类型的类,但这是唯一一个引起我麻烦的类。
我在这里做什么错了?
答案 0 :(得分:3)
您正在尝试将explicit
运算符用作implicit
运算符。
以下应该起作用:
public void someMethod(MyCustomBoolean param) {
string testString = (string)param; // explicit cast to string
}
如果要按编写方式使用代码,则需要将转换运算符定义为implicit
,如下所示:
public static implicit operator string(MyCustomBoolean m) {
return m.value.ToString();
}
public static implicit operator bool(MyCustomBoolean m) {
return m.value;
}
这时,您以前的代码将按预期工作。
public void someMethod(MyCustomBoolean param) {
string testString = param; // implicit cast
}