首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用"out“参数的TryXXX类方法与返回可空值类型的方法?

使用"out“参数的TryXXX类方法与返回可空值类型的方法?
EN

Stack Overflow用户
提问于 2013-07-07 02:40:15
回答 1查看 1.4K关注 0票数 4

我经常在C#中看到这样的方法:(做一个可能会也可能不会得到结果的计算)

代码语言:javascript
复制
bool TrySomething(SomeType inputData, out SomeOtherType result) { ... }

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

代码语言:javascript
复制
Nullable<SomeOtherType> TrySomething(SomeType inputData) { ... }

这仅仅是性能差异吗?这是一个struct,所以不能有堆分配,对吧?还是我错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-07 02:51:58

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

老实说,我并不是一个狂热的粉丝,只要出现问题就返回一个Nullable

通常使用的方法如下所示

代码语言:javascript
复制
SomeOtherType Something(SomeType inputData) { ... }

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

代码语言:javascript
复制
bool TrySomething(SomeType inputData, out SomeOtherType result) { ... }

然而,异常是精确的错误,而布尔值则不是,所以如果它给你false,你就没有更多的“它不工作”的信息。在某些情况下,这可能就足够了。对于我来说,我喜欢将“我的集合不包含该值”错误与“我当前内存不足,无法再做任何事情”错误或其他错误区分开来。

现在引入Nullable作为返回值,这是-正如我所说的-知道接收null并不意味着“值为空”,而是“发生了一些错误”。这是您需要记录和解释的内容,而TryXXX方法的bool结果是不言而喻的。

简而言之,通过使用Nullable作为返回值,您什么也得不到,只会产生更多令人困惑的代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17505958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档