我安装了resharper,它向我建议我应该修改一些局部变量为const。我从来没有听说过这个,所以我开始使用Google搜索。 MSDN肯定有一些本地const的代码,但没有解释为什么。在stackoverflow我遇到了问题,但有更多的是否有一个本地常量比没有他们更快。使用本地const
所以,我在这里挠我的脑袋。为什么有可能有一个本地const?它是否与语义有关?有一些好处吗?也许两个?
我安装了resharper,它向我建议我应该修改一些局部变量为const。我从来没有听说过这个,所以我开始使用Google搜索。 MSDN肯定有一些本地const的代码,但没有解释为什么。在stackoverflow我遇到了问题,但有更多的是否有一个本地常量比没有他们更快。使用本地const
所以,我在这里挠我的脑袋。为什么有可能有一个本地const?它是否与语义有关?有一些好处吗?也许两个?
Const有一个主要好处:它的价值是不可改变的,这强化了代码的稳定性和可靠性。
假设您必须在某些方法执行过程中定义某种日期格式,并且仅适用于此方法。你为什么不使用常量?
public void SomeMethod()
{
const string dateFormat = "MM/dd/yyyy";
... // Lot of operations
return Date.Now.ToString(dateFormat);
}
如果您可以使用常数,则可避免人为错误。
拥有本地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
无论是局部变量还是局部常量(均在方法中声明),值的范围都是相同的。 – 2011-05-09 08:45:36
@Fredrik - 我认为他正在绘制一个局部const和非本地(例如class level)const之间的对比 - 这可能是大多数人熟悉看到const关键字(在C#中)的地方 – 2011-05-09 08:48:50
@FredrikMörk:是的,并且我想回答这个问题_为什么有可能有一个本地常量?_ – 2011-05-09 08:51:13
你是对的。我只是在头脑中(例如让我们来看你的例子)那个dateFormat不会改变,因为它看起来不那么难以松开dateFormat的轨迹,并且意外地附加了另一个值,因为它在一个方法中。 – DerMeister 2011-05-09 09:00:41
是的,但你知道我们是怎样的人类...我们犯了错误,我们远非完美哈哈 – 2011-05-09 10:38:05