2011-05-09 47 views
2

我安装了resharper,它向我建议我应该修改一些局部变量为const。我从来没有听说过这个,所以我开始使用Google搜索。 MSDN肯定有一些本地const的代码,但没有解释为什么。在stackoverflow我遇到了问题,但有更多的是否有一个本地常量比没有他们更快。使用本地const

所以,我在这里挠我的脑袋。为什么有可能有一个本地const?它是否与语义有关?有一些好处吗?也许两个?

回答

2

Const有一个主要好处:它的价值是不可改变的,这强化了代码的稳定性和可靠性。

假设您必须在某些方法执行过程中定义某种日期格式,并且仅适用于此方法。你为什么不使用常量?

public void SomeMethod() 
{ 
    const string dateFormat = "MM/dd/yyyy"; 

    ... // Lot of operations 


    return Date.Now.ToString(dateFormat); 
} 

如果您可以使用常数,则可避免人为错误。

+0

你是对的。我只是在头脑中(例如让我们来看你的例子)那个dateFormat不会改变,因为它看起来不那么难以松开dateFormat的轨迹,并且意外地附加了另一个值,因为它在一个方法中。 – DerMeister 2011-05-09 09:00:41

+0

是的,但你知道我们是怎样的人类...我们犯了错误,我们远非完美哈哈 – 2011-05-09 10:38:05

1

拥有本地const只是一个范围界定问题。而不是const可用于整个类或该类的使用者(如果const是公共的),它仅在声明它的方法中可用。

为了说明为什么ReSharper建议重构,我已经将生成的IL包含在一个简单的示例中。

没有常量:

string s = "foo"; 
Console.WriteLine(s); 

生成的IL:

ldstr  "foo" 
stloc.0  
ldloc.0  
call  System.Console.WriteLine 

随着常量:

const string s = "foo"; 
Console.WriteLine(s); 

生成的IL:

ldstr  "foo" 
call  System.Console.WriteLine 
+0

无论是局部变量还是局部常量(均在方法中声明),值的范围都是相同的。 – 2011-05-09 08:45:36

+0

@Fredrik - 我认为他正在绘制一个局部const和非本地(例如class level)const之间的对比 - 这可能是大多数人熟悉看到const关键字(在C#中)的地方 – 2011-05-09 08:48:50

+0

@FredrikMörk:是的,并且我想回答这个问题_为什么有可能有一个本地常量?_ – 2011-05-09 08:51:13