如何使用c#LanguageExt从Option <SubclassOfT>获取Option <T>

时间:2019-07-02 23:57:01

标签: c# covariance language-ext

假设我有两个班级:

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

1 个答案:

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