首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C#中使用"out“关键字的最佳实践

在C#中使用"out“关键字的最佳实践
EN

Stack Overflow用户
提问于 2009-01-05 14:16:57
回答 10查看 14.5K关注 0票数 22

我正在尝试在c#中为我正在进行的一个项目正式化"out“关键字的用法,特别是在任何公共方法方面。我似乎找不到任何最佳实践,我想知道什么是好的,什么是坏的。

有时我会看到一些方法签名看起来像这样:

代码语言:javascript
运行
复制
public decimal CalcSomething(Date start, Date end, out int someOtherNumber){}

在这一点上,这只是一种感觉,这对我来说并不合适。出于某些原因,我更愿意看到:

代码语言:javascript
运行
复制
public Result CalcSomething(Date start, Date end){}

其中,结果是包含小数和someOtherNumber的类型。我认为这让它更容易阅读。它允许在不破坏代码的情况下扩展结果或添加属性。这也意味着这个方法的调用者在调用之前不必声明一个本地作用域的"someOtherNumber“。从使用预期来看,并不是所有的调用者都会对"someOtherNumber“感兴趣。

相比之下,我现在能想到的在.Net框架中唯一有意义的"out“参数实例是在TryParse()这样的方法中。这实际上使调用者编写更简单的代码,从而调用者主要对out参数感兴趣。

代码语言:javascript
运行
复制
int i;
if(int.TryParse("1", i)){
  DoSomething(i);
}

我认为只有当返回类型是bool,并且预期的用法是调用者总是对"out“参数感兴趣的地方时,才应该使用"out”。

有什么想法?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-01-05 14:22:42

当您使用out参数时,有一个静态代码分析(=FxCop)规则指向您是有原因的。我要说的是:只有在互操作类型的场景中真正需要的时候才使用out。在所有其他情况下,请不要使用out。但也许那只是我?

票数 22
EN

Stack Overflow用户

发布于 2009-01-05 14:51:10

下面是.NET Framework Developer's Guide对out参数的说明:

避免使用out或reference参数。

使用定义out或reference参数的成员要求开发人员了解指针、值类型和reference类型之间的细微差异以及out参数和reference参数之间的初始化差异。

但是如果你使用them

会将所有输出参数放在所有按值传递和引用参数(不包括参数数组)之后,即使这会导致重载之间的参数排序不一致。

此约定使方法签名更易于理解。

票数 19
EN

Stack Overflow用户

发布于 2009-01-05 14:29:06

你的方法比out更好,因为你可以这样“链”调用:

代码语言:javascript
运行
复制
DoSomethingElse(DoThing(a,b).Result);

而不是

代码语言:javascript
运行
复制
DoThing(a, out b);
DoSomethingElse(b);

使用"out“实现的TryParse方法是一个错误。这些在链条中是非常方便的。

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

https://stackoverflow.com/questions/413218

复制
相关文章

相似问题

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