具有“out”参数的类似TryXXX的方法与返回可为空的值类型?

我经常在C#中看到这样的方法:(做一个可能给出或不给出结果的计算)

bool TrySomething(SomeType inputData, out SomeOtherType result) { ... } 

为什么人们不使用这样的东西呢?

 Nullable TrySomething(SomeType inputData) { ... } 

这只是性能差异吗? 这是一个struct ,所以必须没有堆分配,对吧? 或者我错过了什么?

Nullable在C#2.0中被引入 – 就像generics一样。 有很多代码早于此。

说实话,每当出现问题时,我都不会只是回归Nullable

你通常拥有的是一种方法

 SomeOtherType Something(SomeType inputData) { ... } 

如果出现问题,将抛出exception。 现在在某些情况下,您希望避免exception,因此有另一种方式:您给出的方式。

 bool TrySomething(SomeType inputData, out SomeOtherType result) { ... } 

但是,一个例外是错误的,布尔值不是。 因此,如果它给你false ,你就会得到更多的信息“它不起作用”。 在某些情况下,这可能就足够了。 我,我喜欢区分“我的集合没有包含那个值”的错误来自“我目前正在耗尽内存并且不能再做任何事情”错误,或者其他任何错误。

现在引入Nullable作为返回值,它是 – 正如我所说的 – 德鲁伊知识知道接收null并不意味着“值为空”,而是“发生了一些错误”。 这是你需要记录和解释的东西,而TryXXX方法的bool结果是不言自明的。

简而言之,通过使用Nullable作为返回值,您只会产生稍微混乱的代码。

Interesting Posts