假设我有两个班级:
public class Base
{
}
public class Sub : Base
{
}
从Option<Base>
获取Option<Sub>
的正确方法是什么?
这样做的原因是我有一个期望Option<Base>
的函数,例如
public void DoSomething(Option<Base> thing);
此功能将不接受Option<Sub>
。我真的希望Option<>
支持协方差,这样我就可以像通常使用Option<Sub>
一样直接传递IEnumerable<Sub>
。
这是另一个例子:
Option<Base> object1 = new Base();
Option<Sub> object2 = new Sub();
Option<bool> selectOption2 = true;
Option<Base> result = selectOption2
.Bind(opt2 => opt2
? object2.Map<Base>(x => x)
: object1);
我宁愿不必在object2.Map<Base>(x => x)
中进行Bind
来获得result
。
答案 0 :(得分:0)
当前,我们正在定义扩展方法,但是我确定文档中肯定缺少某些内容,因为这似乎必须是非常常见的用例?
public static class OptionExtensions
{
public static Option<U> MapType<T, U>(this Option<T> source) where T : U
=> source.Map<U>(x => x);
}