6

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

警告 147 CA1021:Microsoft.Design:考虑不需要将“returnValue”作为输出参数的设计。

我发现“输出”参数相当有用,并且没有意识到它们被认为是不赞成设计实践的。我想知道是否有人可以阐明我收到此警告的原因?如果这是不好的做法?为什么?什么是好的做法?

我很感激任何建议。

4

4 回答 4

9

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

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

我会说在某些情况下 out 参数仍然是一个不错的选择 - 特别是在涉及 TryParse 编码习惯时,因为它是一种行之有效的做事方式,大多数人都应该理解它

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

于 2009-09-10T12:09:06.317 回答
3

我曾经对我的项目进行过代码分析。我也确实得到了很多有见地的建议,我很简短地把它关掉了。许多建议都具有宗教性质,您可以这样或那样做,这是一种风格问题,而不是一种不好的做法。

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

如果你还有一个返回码占据了返回位置,可以考虑使用异常来通知调用者代码操作错误。

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

于 2009-09-10T12:08:06.180 回答
3

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

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

于 2009-09-10T12:28:55.083 回答
1

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

不过我可以想象,在一个项目中与多人一起工作时,如果你想做一些代码审查,你可能希望打开这个警告......

于 2009-09-10T12:10:28.263 回答