【发布时间】: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变量。