代码分析回来时建议不要使用“out”参数

我针对我创建的对象运行了VS 2008代码分析工具,并收到了以下建议……

警告147 CA1021:Microsoft.Design:考虑一种不要求’returnValue’为out参数的设计。

我发现“out”参数非常有用,并没有意识到它们被认为是一种不受欢迎的设计实践。 我想知道是否有人可以了解我收到此警告的原因? 如果这是不好的做法? 为什么? 什么是好的做法?

我很感激任何建议。

每个代码分析警告都有相关的文档,您可以通过高亮显示警告并按F1来访问这些文档。 您也可以右键单击该项目以获取帮助。

无论如何,这里是解释该特定警告的文档 。

我会说有一些情况下,out参数仍然是一个不错的选择 – 特别是当涉及TryParse编码习惯用法时,因为它是如此完善的做事方式,大多数人都应该理解它

然而,在一般使用中,存在针对多个返回值的更好的,更面向对象的解决方案。

我曾经在我的项目上运行自己的代码分析。 此外,我确实得到了许多富有洞察力的建议,我非常简短地将其关闭了。 许多建议具有宗教性质,你可以这样或那样做,这是一种风格问题,而不是一种不好的做法。

为了你的情况。 如果您只有一个返回参数,则将其从函数返回。

如果还有一个占用返回位置的返回码,请考虑使用例外来通知调用者代码操作错误。

如果要返回的参数彼此密切相关,请创建一个类/结构将它们保持在一起并将其作为包返回。

在我看来,许多代码分析警告与编写第三方将使用的API代码相关。 带有’out’参数的规则是一个经典案例:不使用它们的部分原因是因为许多其他程序员不会知道它们。

如果它们与您正在编写的内容不匹配,请关闭不适合您的代码分析规则。 我个人倾向于关闭命名,可移植性和互操作性规则,因为它们与我编写的代码类型无关。

在我的大多数项目中,我已经关闭了这个特定的警告。 因为,我知道,当我使用out参数时,我有充分的理由这样做,因为我试图完全避免它们。

我可以想象,虽然在项目中与多人合作时,如果您想要进行一些代码审查,您可能希望打开此警告…