在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"}
答案 0 :(得分:1)
这将运行func1
并返回结果,如果它不是null
。如果是null
,它将运行func2
并返回结果,如果它不是null
。如果它也是null
,它将运行func3
并返回其结果,无论它是否为null
。
return func1() ?? func2() ?? func3();
??
被称为null-coalescing operator,至少在c#。