【问题标题】:Nested implicit operator嵌套隐式运算符
【发布时间】:2016-10-05 21:40:09
【问题描述】:

我有一个名为 Optional 的自定义类。此类重写隐式运算符,如下所示:

public static implicit operator Optional<T>(T value)
{
    return new Optional<T>(value);
}

public static implicit operator T(Optional<T> value)
{
    return value.value;
}

好的,到目前为止一切都很好,像这样的直接操作可以工作:

Optional<int> val = 33; //ok
int iVal = val; //ok

但是,这不起作用:

Optional<Optional<int>> val = 33; //error, cannot convert implicitly

所以我想知道如何支持前一种情况。

干杯。

【问题讨论】:

    标签: c# operator-overloading implicit-conversion


    【解决方案1】:

    您不能链接用户定义的隐式运算符。如果您定义了从 A 到 B 以及从 B 到 C 的隐式转换,则没有从 A 到 C 的隐式转换同时调用两者。您要么需要创建一个单独的用户定义的从 A 到 C 的转换,要么有一个 显式 转换来为您完成一半的转换。

    【讨论】:

    • 您能否添加一个示例,说明如何使用显式运算符来帮助解决这种情况?谢谢。
    • @Gusman 如果存在从 A 到 B 以及从 B 到 C 的隐式转换,那么您可以编写 C c = (B)a;,因为这最终只使用了一个用户定义的隐式转换。
    • 好的,我明白了,我以为您的意思是覆盖显式运算符。谢谢。
    • @Gusman 定义隐式转换运算符隐式允许使用它执行显式转换。您不需要(事实上也不能)为相同的类型转换定义显式转换。
    • 是的,我知道,因为我很困惑 :)
    猜你喜欢
    • 2012-02-03
    • 2010-10-24
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 2020-04-14
    • 2011-04-30
    相关资源
    最近更新 更多