【问题标题】:what is the pros and cons of using out parameter使用out参数的优缺点是什么
【发布时间】:2010-11-15 02:41:55
【问题描述】:

任何人都可以指出out参数的优缺点。当首选使用 out 参数而不是仅仅返回一个值时。

【问题讨论】:

    标签: c# .net


    【解决方案1】:

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

    有人可能会争辩说,使用 out 参数的函数更容易忽略可能的副作用,因为它背离了传统的“多参数,一个返回值”模型。但老实说,out 关键字加上方法后置条件让程序员的意图很明确。

    【讨论】:

    • 我不确定我是否同意通常最好使用“out”值而不是返回对象的概念,但也许是因为我没有完全按照您的意图解释任意。对我来说,返回值的集合(带有单个返回对象的属性)通常比必须声明和维护的变量列表提供更大的灵活性,但我同意这两种情况都有很好的情况。它们似乎在 TryParse 类型方法中非常有意义,我同意, + bool (成功?)的“特殊”结构似乎有点矫枉过正。
    【解决方案2】:

    我建议看一下 int 等内置类型的 TryParse 方法。返回值是一个表示成功的布尔值,而该值是通过 out 参数返回的。这种构造使得在循环构造中调用此方法很有用,其中另一种返回类型会/可能使其更复杂。

    进一步思考,一个缺点可能是倾向于只向方法添加参数,而不是正确封装逻辑。

    【讨论】:

    • 想知道为什么布尔返回在循环中是好的?你能举个例子吗?
    • @user496949 - 使用 TryParse 方法,您可以通过查看方法的返回来相当简单地处理解析失败。这使您免于尝试处理解析异常或寻找表明结果值在某种程度上无效的东西。考虑一个布尔值可能是最简单的例子。除了一个例外,人们怎么会知道结果值是“无效的”?使用 tryParse,方法本身表示成功,结果值要么被正确解析为新值,要么保持在调用方法之前的状态。
    • 我认为您遇到了主要缺点。据我所知,每一个输出参数。需要调用该方法的对象维护另一个变量。在此过程中忽略几个额外的变量并不是什么“大问题”,但它确实有很大的可能性变得不必要的麻烦,当该方法可以同样容易(并且可能更正确)将所有这些信息封装到它的返回值。
    • 我一直认为 out 参数是一种轻微的代码异味,因为它们往往表明您有一个方法可以做不止一件事情,而这些事情可能应该被分解为单独的方法.在尝试为工作中的初级开发人员创建一些编码指南时,我做了一些研究并决定我可以从不使用参数,因为有时它们是有用的和必要的构造,例如重构为多个方法的情况会导致额外的数据库往返。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      在 C# 中,您不能返回多个变量,因此如果您不想遍历一个类(返回具有这些多个变量的类),您可以使用 out 参数来完成这项工作。

      【讨论】:

        猜你喜欢
        • 2010-09-08
        • 1970-01-01
        • 2010-09-06
        • 2015-01-30
        • 2011-04-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-24
        • 1970-01-01
        相关资源
        最近更新 更多