为什么即使创建了显式运算符也无法将源类型转换为字符串?

时间:2019-03-18 22:55:13

标签: c# casting

我有一堂很简单的课:

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

我有几个处理不同类型的类,但这是唯一一个引起我麻烦的类。

我在这里做什么错了?

1 个答案:

答案 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
}