C# 使用局部常量
我安装了resharper,它向我建议应该将一些局部变量修改为常量。我从没听说过这个,所以我开始用谷歌搜索。MSDN当然有一点本地常量的代码,但没有解释原因。在stackoverflow上,我遇到了一些问题,但更多的是关于是否有一个本地const比没有它们更快C# 使用局部常量,c#,c#-4.0,C#,C# 4.0,我安装了resharper,它向我建议应该将一些局部变量修改为常量。我从没听说过这个,所以我开始用谷歌搜索。MSDN当然有一点本地常量的代码,但没有解释原因。在stackoverflow上,我遇到了一些问题,但更多的是关于是否有一个本地const比没有它们更快 所以,我在这里挠头。为什么可能有一个本地const?这与语义有关吗?有什么好处吗?可能两者都有?拥有一个局部常量只是一个范围问题。该常量不是可用于整个类或该类的使用者(如果该常量是公共的),而是仅在声明它的方法中可用 为了说明ReShar
所以,我在这里挠头。为什么可能有一个本地const?这与语义有关吗?有什么好处吗?可能两者都有?拥有一个局部常量只是一个范围问题。该常量不是可用于整个类或该类的使用者(如果该常量是公共的),而是仅在声明它的方法中可用 为了说明ReSharper建议重构的原因,我在一个简单的例子中包含了生成的IL 无常数:
string s = "foo";
Console.WriteLine(s);
生成的IL:
ldstr "foo"
stloc.0
ldloc.0
call System.Console.WriteLine
ldstr "foo"
call System.Console.WriteLine
对于常数:
const string s = "foo";
Console.WriteLine(s);
生成的IL:
ldstr "foo"
stloc.0
ldloc.0
call System.Console.WriteLine
ldstr "foo"
call System.Console.WriteLine
Const有一个主要好处:它的值是不变的,这加强了代码的稳定性和稳定性 假设您必须在某个方法执行期间定义某个日期格式,并且它仅对该格式有效。为什么不使用常数呢
public void SomeMethod()
{
const string dateFormat = "MM/dd/yyyy";
... // Lot of operations
return Date.Now.ToString(dateFormat);
}
如果可以使用常量,则可以避免人为错误。无论是局部变量还是局部常量(都在方法中声明),值的作用域都是相同的。@Fredrik-我认为他在对比局部常量和非局部常量(例如,类级别)const-这可能是大多数人熟悉的const关键字(在C#)的地方@Fredrik Mörk:是的,我试图回答为什么可能有一个局部const?好的,我理解这个问题是关于局部变量和局部const(“[…])之间的区别我应该将一些局部变量修改为常量。/…/为什么可能有一个局部常量?它与语义有关吗?有什么好处吗?)。从这个角度来看,我对范围的讨论有点困惑:-)我指的是局部变量和局部常量,范围是一个方法,如
SomeMethod(){int y=10}
和SomeMethod(){const int y=10}代码>我不是说范围是方法/类。我很抱歉给你带来任何困惑,我从谷歌上找到了术语local const。你完全正确。我当时的想法是(例如,让我们以你为例)dateFormat无论如何都不会改变,因为它似乎不太难脱离dateFormat的轨道并意外地附加另一个值,因为它是在一个方法中。是的,但你知道我们是人类。。。我们犯错误,我们离完美还很远哈哈