嵌套隐式运算符
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 的转换,或者使用 显式 转换来为您完成一半的转换。
我有一个名为 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
所以我想知道如何支持以前的情况。
干杯。
您不能链接用户定义的隐式运算符。如果您定义了从 A 到 B 和从 B 到 C 的隐式转换,则没有从 A 到 C 的隐式转换同时调用两者。您需要创建一个单独的用户定义的从 A 到 C 的转换,或者使用 显式 转换来为您完成一半的转换。