TryXXX样方法;out”;parameters vs返回可为null的值类型
本文关键字:null 返回 类型 vs 方法 out parameters TryXXX | 更新日期: 2023-09-27 18:21:13
我经常在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
作为返回值,我称之为druid知识,知道接收null
并不意味着"值为null",而是"发生了一些错误"。这是您需要记录和解释的内容,而TryXXX
方法的bool
结果是不言自明的。
简而言之,通过使用Nullable
作为返回值,您只会产生稍微更令人困惑的代码。