我经常在 C# 中看到这样的方法:(进行可能会或可能不会给出结果的计算)
bool TrySomething(SomeType inputData, out SomeOtherType result) { ... }
为什么人们不使用这样的东西呢?
Nullable<SomeOtherType> TrySomething(SomeType inputData) { ... }
仅仅是性能差异吗?
这是一个struct
,所以一定没有堆分配,对吧?
或者我错过了什么?
Nullable
与泛型一样,在 C# 2.0 中引入。在此之前有很多代码。
说实话,我不太喜欢直接退货Nullable
每当出现问题时。
你通常拥有的是这样的方法
SomeOtherType Something(SomeType inputData) { ... }
如果出现问题,它将抛出异常。现在在某些情况下,您想避免异常,因此有一种替代方法:您提供的方法。
bool TrySomething(SomeType inputData, out SomeOtherType result) { ... }
然而,异常可以精确地指出错误所在,而布尔值则不然。所以如果它给你false
,您几乎没有更多关于“它不起作用”的信息。在某些情况下,这可能就足够了。对于我来说,我喜欢区分“我的集合不包含该值”错误和“我当前内存不足,无法再执行任何操作”错误或其他错误。
现在介绍的是Nullable
作为返回值,它是 - 正如我所说的 - 德鲁伊知识知道接收null
并不意味着“该值为空”,而是“发生了一些错误”。这是你需要记录和解释的事情,而bool
的结果TryXXX
方法是不言自明的。
简而言之,您除了使用以下命令产生稍微更混乱的代码之外什么也没得到Nullable
作为返回值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)