当前位置:  开发笔记 > 编程语言 > 正文

在C#中使用"out"关键字的最佳做法

如何解决《在C#中使用"out"关键字的最佳做法》经验,为你挑选了3个好方法。

我正在尝试将c#中"out"关键字的使用形式化为我正在使用的项目,特别是对于任何公共方法.我似乎无法找到任何最佳实践,并想知道什么是好的或坏的.

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

public decimal CalcSomething(Date start, Date end, out int someOtherNumber){}

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

public Result CalcSomething(Date start, Date end){}

其中结果是包含小数和someOtherNumber的类型.我认为这使得阅读更容易.它允许扩展Result或添加属性而不会破坏代码.这也意味着此方法的调用者不必在调用之前声明本地作用域"someOtherNumber".根据使用期望,并非所有呼叫者都会对"someOtherNumber"感兴趣.

相比之下,我现在可以在.Net框架中考虑"out"参数有意义的唯一实例是TryParse()等方法.这些实际上使调用者编写更简单的代码,因此调用者主要对out参数感兴趣.

int i;
if(int.TryParse("1", i)){
  DoSomething(i);
}

我认为只有在返回类型为bool时才会使用"out",并且预期的用法是调用者总是对"out"参数感兴趣的设计.

思考?



1> peSHIr..:

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



2> Mitch Wheat..:

这是.NET Framework Developer's Guide关于参数的说法:

避免使用输出或参考参数.

使用定义或引用参数的成员需要开发人员理解指针,值类型和引用类型之间的细微差别,以及out和reference参数之间的初始化差异.

但如果你确实使用它们:

在所有pass-by-value和ref参数(不包括参数数组)之后放置所有参数,即使这会导致重载之间的参数排序不一致.

此约定使方法签名更容易理解.


所以开发人员指南基本上说你不应该使用参数,因为大多数开发人员太愚蠢,无法理解他们所选语言的一个非常基本的方面!

3> Giovanni Gal..:

你的方法比出更好,因为你可以通过这种方式"链接"调用:

DoSomethingElse(DoThing(a,b).Result);

而不是

DoThing(a, out b);
DoSomethingElse(b);

用"out"实现的TryParse方法是一个错误,IMO.这些在链条上会非常方便.


好吧,你需要一种方法来判断解析是否成功.
对于链接,使用`int.Parse()`,或传递未解析的字符串.我不知道如何在不使用`out`参数的情况下获得`TryParse()`功能.
推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有