什么是替代

时间:2018-03-17 14:24:56

标签: c# oop

在Haskell中,如果我想要尝试一堆计算,直到其中一个成功,我可以做类似的事情:

f :: a -> Maybe b
g :: a -> Maybe b
h :: a -> Maybe b
TryUntilSuccess :: a -> Maybe b
TryUntilSuccess x = f x <|> g x <|> h x

将返回f,g或h中的第一个返回任何不是Nothing的内容,如果没有成功则返回Nothing。

C#/ OOP替代方案是在if-else链中使用null类型吗?我已经读过,一般来说函数返回null是一种不好的做法,所以我不知道这是否是一个很好的选择。

修改

继承人试图做那样的事情 好吧也许像

这样的东西
    MyObj func1() { /* body */ }
    MyObj func2() { /* body */ }
    MyObj func3() { /* body */ }

    if ("func1 succeeds") {return func1()}
    else if ("func2 succeeds") {return func2()}
    else if ("func3 succeeds") {return func3()}
    else {"they all failed"}

1 个答案:

答案 0 :(得分:1)

这将运行func1并返回结果,如果它不是null。如果是null,它将运行func2并返回结果,如果它不是null。如果它也是null,它将运行func3并返回其结果,无论它是否为null

return func1() ?? func2() ?? func3();

??被称为null-coalescing operator,至少在c#。