Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用局部常量_C#_C# 4.0 - Fatal编程技术网

C# 使用局部常量

C# 使用局部常量,c#,c#-4.0,C#,C# 4.0,我安装了resharper,它向我建议应该将一些局部变量修改为常量。我从没听说过这个,所以我开始用谷歌搜索。MSDN当然有一点本地常量的代码,但没有解释原因。在stackoverflow上,我遇到了一些问题,但更多的是关于是否有一个本地const比没有它们更快 所以,我在这里挠头。为什么可能有一个本地const?这与语义有关吗?有什么好处吗?可能两者都有?拥有一个局部常量只是一个范围问题。该常量不是可用于整个类或该类的使用者(如果该常量是公共的),而是仅在声明它的方法中可用 为了说明ReShar

我安装了resharper,它向我建议应该将一些局部变量修改为常量。我从没听说过这个,所以我开始用谷歌搜索。MSDN当然有一点本地常量的代码,但没有解释原因。在stackoverflow上,我遇到了一些问题,但更多的是关于是否有一个本地const比没有它们更快


所以,我在这里挠头。为什么可能有一个本地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的轨道并意外地附加另一个值,因为它是在一个方法中。是的,但你知道我们是人类。。。我们犯错误,我们离完美还很远哈哈