嵌套隐式运算符

Nested implicit operator

我有一个名为 Optional 的自定义 class。这个 class 覆盖隐式运算符,像这样:

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

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

干杯。

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