我经常在C#中看到这样的方法:(做一个可能会也可能不会得到结果的计算)
bool TrySomething(SomeType inputData, out SomeOtherType result) { ... }为什么人们不使用这样的东西呢?
Nullable<SomeOtherType> TrySomething(SomeType inputData) { ... }这仅仅是性能差异吗?这是一个struct,所以不能有堆分配,对吧?还是我错过了什么?
发布于 2013-07-07 02:51:58
像泛型一样,Nullable是在C# 2.0中引入的。在此之前有很多代码。
老实说,我并不是一个狂热的粉丝,只要出现问题就返回一个Nullable。
通常使用的方法如下所示
SomeOtherType Something(SomeType inputData) { ... }如果出现问题,它将抛出一个异常。现在,在某些情况下,您希望避免异常,因此有一种替代方法:您提供的方法。
bool TrySomething(SomeType inputData, out SomeOtherType result) { ... }然而,异常是精确的错误,而布尔值则不是,所以如果它给你false,你就没有更多的“它不工作”的信息。在某些情况下,这可能就足够了。对于我来说,我喜欢将“我的集合不包含该值”错误与“我当前内存不足,无法再做任何事情”错误或其他错误区分开来。
现在引入Nullable作为返回值,这是-正如我所说的-知道接收null并不意味着“值为空”,而是“发生了一些错误”。这是您需要记录和解释的内容,而TryXXX方法的bool结果是不言而喻的。
简而言之,通过使用Nullable作为返回值,您什么也得不到,只会产生更多令人困惑的代码。
https://stackoverflow.com/questions/17505958
复制相似问题