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,所以肯定没有堆分配,对吧?或者我错过了什么?

TryXXX样方法;out”;parameters vs返回可为null的值类型

Nullable是在C#2.0中引入的,就像泛型一样。有很多代码早于此。

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

你通常有一种类似的方法

SomeOtherType Something(SomeType inputData) { ... }

如果出现问题,它将抛出异常。现在,在某些情况下,您希望避免出现异常,因此有一种替代方法:您给出的方法。

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

然而,异常在哪里出了问题是准确的,布尔值则不是。因此,如果它给你false,你就不会有更多的信息表明"它不起作用"。在某些情况下,这可能就足够了。我喜欢将"我的集合不包含该值"错误与"我当前内存不足,无法再做任何事情"错误或其他错误区分开来。

现在引入Nullable作为返回值,我称之为druid知识,知道接收null并不意味着"值为null",而是"发生了一些错误"。这是您需要记录和解释的内容,而TryXXX方法的bool结果是不言自明的。

简而言之,通过使用Nullable作为返回值,您只会产生稍微更令人困惑的代码。