Jac*_*Kim 7 c# string return variable-assignment operator-keyword
当我在C#中处理一些较旧的代码时,我遇到了一个令我烦恼的代码.
没有太多的麻烦,它是这样的:
private string foo(string _text)
{
/* some manipulation on _text */
return _text = Server.HtmlDecode(_text);
}
Run Code Online (Sandbox Code Playgroud)
这是让我烦恼的最后一句话; 我来自C背景,我可以理解代码实际上是试图返回一个已解码的_text变量.赋值运算符的值也是左操作数,所以我可以看到它.
然而,我仍然觉得它很令人厌烦.
它是C#中的纵向练习,我需要习惯吗?
对我来说,最后一行应该是
return Server.HtmlDecode(_text);
Run Code Online (Sandbox Code Playgroud)
而不是作业表达.是否有更深入的C#功能,我不知道?
Eri*_*ert 11
当我在C#中处理一些较旧的代码时,我遇到了一个令我烦恼的代码.
这里有许多令人厌烦的问题.让我们列出所有.
private string foo(string _text)
{
/* some manipulation on _text */
return _text = Server.HtmlDecode(_text);
}
Run Code Online (Sandbox Code Playgroud)
这是让我烦恼的最后一句话
评论也令人厌烦.局部变量很便宜.没有必要删除原始值_text.相反,创建一个新的局部变量并操纵它.这样,当您在方法中的任何位置进行调试时,您可以知道原始参数是什么.(请记住,在变量被覆盖的那一刻,原始参数可能有资格进行垃圾收集,因此可能永远丢失.)
没有很好的理由,不要写一个正式的参数.这使得调试变得更加困难.
赋值运算符的值是左操作数,所以我可以看到它.
在这种情况下这是正确的,但总的来说是微不足道的; C#中赋值运算符的值是转换为与左侧关联的类型后右操作数的值.请记住,左侧可能没有值; 它可能是一个只写属性.
它是C#中的纵向练习,我需要习惯吗?
这里有一个标准做法,是的.关于这种用法的奇怪之处在于:(1)选择的变量是形式的,(2)赋值与...相结合return.
C#中的标准做法是:
string decoded = Server.HtmlDecode(_text);
return decoded;
Run Code Online (Sandbox Code Playgroud)
现在你可能想知道这对你的建议有什么好处:
return Server.HtmlDecode(_text);
Run Code Online (Sandbox Code Playgroud)
答案是:在Visual Studio 2013之前,调试器中没有工具可以检查方法调用的返回值!因此,如果您想HtmlDecode在调试时查看返回的值,您有以下选择:
HtmlDecode并检查其状态由于前三个是可怕的,而最后一个很容易,这就是许多C#程序员习惯做的事情.
如果你这样做,然后不使用结果本地,C#编译器知道这是一种常见的做法,并故意压制"你写的本地,然后你从来没有读过"警告.它只会在本地有一个常量写入时发出警告,在这种情况下,你已经知道它在编译时是什么,并且通常不需要在调试器中检查它.
希望现在VS2013最终支持这种频繁请求的功能,这种模式将逐渐消失.
| 归档时间: |
|
| 查看次数: |
3668 次 |
| 最近记录: |