使用输出参数的优缺点是什么?

4

任何人都可以指出输出参数的优缺点。在什么情况下应该使用输出参数而不是仅返回一个值。

4个回答

7

输出参数有效地允许您从方法中返回多个值,这通常比返回包含多个值的任意结构或元组更可取。

有人可能会认为,使用输出参数的函数可能会忽略可能的副作用,因为它偏离了传统的“多参数,一个返回值”模型。但是我真诚地认为,与方法后置条件相结合的输出关键字可以清楚地表明程序员的意图。


2
我不确定我是否同意这种观点,即通常最好具有“out”值而不是返回对象,但也许这是因为我没有像您预期的那样解释任意。对我来说,一组返回值(单个返回对象中的属性)通常比必须声明和维护的变量列表提供更多的灵活性,但我同意两种情况都有很好的案例。它们似乎在TryParse类型方法中非常合理,在那里,我同意,“特殊”的<var type> + bool(成功?)结构似乎过度了。 - Steven

4
我建议查看内置类型(如int)上的TryParse方法。返回值是一个布尔值,表示成功与否,而值则通过out参数返回。这种结构使得在循环结构中调用此方法非常有用,而其他返回类型可能会使它变得更加复杂。
进一步思考后,一个缺点可能是倾向于将out参数添加到方法中,而不是正确地封装逻辑。

想知道为什么在循环中使用布尔返回值是好的?你能给个例子吗? - user496949
使用 TryParse 方法可以通过查看方法返回值来简单处理解析失败的情况。这样可以避免尝试处理解析异常或寻找表示结果值无效的内容。考虑布尔值可能是最简单的示例。除了异常,如何知道结果值是“无效”的?使用 TryParse,方法本身指示成功,并且结果值已正确解析为新值,或在调用方法之前保持不变。 - Steven
我认为你指出了一个主要的缺点。根据我的理解,每个输出参数都需要调用方法的对象维护另一个变量。在过程中声明几个额外的变量并不是什么大问题,但这很有可能变得不必要地繁琐,而方法可以更容易(也更合适)地将所有信息封装到返回值中。 - Steven
我一直认为输出参数有点像是代码中的小问题,因为它们往往暗示着你有一个方法做了不止一件事情,这可能应该被分解成单独的方法。在尝试为工作中的初级开发人员创建一些编码指南时,我进行了一些研究,并决定不能说永远不使用输出参数,因为有时它们是有用和必要的构造,例如重构成多个方法会导致额外的数据库往返的情况。 - user74754

0

正如你所说,没有 out 参数,你只能返回一个值,而 out 关键字允许你“返回”多个值


0
在C#中,你不能返回多个变量,所以如果你不想通过类(返回一个带有这些多个变量的类)来完成工作,你可以使用out参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接