【问题标题】:Modifying C# Out parameter more than once多次修改 C# Out 参数
【发布时间】:2019-05-07 12:06:43
【问题描述】:

当您有一个具有 out 参数的函数时,最佳做法是在函数内部创建一个新变量并在函数末尾将 out 参数分配给它吗?或者在开始时给 out 参数一些空/默认值,然后在整个函数中进行修改。

我试图提出一些理由来说明为什么这些编码风格/实践中的一种更好用。

选项 1:仅使用 out 参数。

public bool SomeFunc(out string outStr)
{
   outStr = "";

   if (errorCond)
      return false;

   outStr += "foo";
   outStr += "bar";

   return true;
}

选项 2:使用临时变量。

public bool SomeFunc1(out string outStr)
{
   string tempStr = "";
   outStr = "";      // To prevent 'The out parameter must be set' error on return false line.

   if (errorCond)
      return false;

   tempString += "foo";
   tempString += "bar";

   outStr = tempStr;
   return true;
}

尽管这两种方法都达到了相同的结果,但哪种方法更可取?它们中的任何一个都有什么缺点吗?

【问题讨论】:

  • 多次使用没有错。但是,我建议使用StringBuider,在那些你将在字符串末尾进行大量连接的情况下。
  • 分配一次确实可以让编译器更轻松地优化代码。对输出参数的分配被视为易失性,因为它们可能会修改内存。您可以衡量改进的可能性并不大,字符串操作的成本要高得多。您只能从分析员那里获得良好的指导。
  • 第一个选项,因为一般来说代码越少可读性越好。
  • 编译器现在真的很聪明。我敢打赌,如果您在 Release 中编译代码,甚至不会创建 tempStr 变量。

标签: c# out


【解决方案1】:

其实没关系,你只需要在这个方法中赋值变量即可。 但是,最好to avoid using output or reference parameters:

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

对我来说,第二个是开销

在方法的开头指定一个默认值,然后根据需要更改该值。

查看 .net 源代码中的示例,例如 int.TryParseEnum.TryParse

【讨论】:

  • 感谢您将我指向一些 .net 函数的源代码。很明显,在示例中他们使用了我指出的第一种方法。您关于不使用 out 参数的评论没有任何帮助,因为这个问题专门针对 out 参数。
猜你喜欢
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多