4

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

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

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

Nullable<SomeOtherType> TrySomething(SomeType inputData) { ... }

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

4

1 回答 1

1

Nullable在 C# 2.0 中引入 - 就像泛型一样。在此之前有很多代码。

老实说,我不喜欢在出现问题时只返回一个Nullable

您通常拥有的方法是

SomeOtherType Something(SomeType inputData) { ... }

如果出现问题,这将引发异常。现在在某些情况下,您想避免异常,因此有另一种方法:您提供的方法。

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

但是,异常是准确的,而布尔值则不是。因此,如果它给您false,您将获得更多“它不起作用”的信息。在某些情况下,这可能就足够了。我,我喜欢将“我的集合不包含该值”错误与“我当前内存不足,无法再做任何事情”错误或其他任何错误区分开来。

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

简而言之,通过使用Nullable作为返回值,除了产生稍微更混乱的代码之外,您什么也得不到。

于 2013-07-06T18:51:58.407 回答