Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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#编译器会通过将var转换为const来优化这段代码吗?_C#_.net - Fatal编程技术网

C#编译器会通过将var转换为const来优化这段代码吗?

C#编译器会通过将var转换为const来优化这段代码吗?,c#,.net,C#,.net,假设我有这个功能: public string GenerateHash(string[] values) { var secureSecret = "a secret string"; //<-- this can/should be const var str = new StringBuilder(secureSecret); foreach (var value in values) { str.Append(value); }

假设我有这个功能:

public string GenerateHash(string[] values)
{
    var secureSecret = "a secret string";  //<-- this can/should be const

    var str = new StringBuilder(secureSecret);
    foreach (var value in values) {
        str.Append(value);
    }

    return GenerateMd5Hash(str.ToString());
}
公共字符串生成器哈希(字符串[]值)
{

var secureSecret=“a secret string”//如果查看生成的IL,可以看到编译器没有创建新字符串,它只是调用:

编译器足够聪明,可以将这个常量字符串“烘焙”到正在创建的生成的DLL/可执行文件中


话虽如此,使用
const
传达了作者的意图,增加了代码的清晰度并增强了可维护性。它将允许您重构这些“魔法”字符串更容易,而不是在代码库中到处散布它们。

如果查看生成的IL,可以看到编译器没有创建新字符串,它只调用:

编译器足够聪明,可以将这个常量字符串“烘焙”到正在创建的生成的DLL/可执行文件中


话虽如此,使用
const
传达了作者的意图,增加了代码的清晰度并增强了可维护性。它将允许您重构这些“魔法”字符串更容易,而不是在代码库中到处散布它们。

semi offtopic:我想指出,任何人在ILSpy/ildasm等中查看您的dll/exe都可以轻松地读取您的“secureSecret”,因此您可能想问一个关于隐藏/混淆字符串的单独问题!@tolanj,明白..这很好。但我只是编造了上面的代码片段…在我的例子中,我实际上正在审核大量遗留代码,并收到大量警告,说“变量可以变为常量”…所有这些实际上都不会带来安全风险。semi-offtopic:我要指出的是,任何人在ILSpy/ildasm等中查看您的dll/exe都可以轻松地读取您的“secureSecret”,因此您无法我想单独问一个关于隐藏/混淆字符串的问题!@tolanj,明白了。这是一个很好的观点。但我只是编造了上面的代码片段…在我的例子中,我实际上在审计大量的遗留代码,并收到大量警告,说“变量可以变为常量”…所有这些都不会带来安全风险。我必须学习这个奇怪的IL东西。…看起来很有趣。顺便说一句,我目前正在审核大量的遗留代码,有数百个(可能数千个)警告“变量可以变为常量”…,所以可能不值得努力修复它。@RosdiKasim它不奇怪,实际上很好:)。你可以在封面下看到,这总是一件值得学习的事情。必须学习这个奇怪的IL东西…看起来很有趣。顺便说一句,我目前正在审核大量的遗留代码,有上百个s(可能有数千)个警告“变量可以变为常量”…,因此可能不值得努力修复它。@RosdiKasim这并不奇怪,实际上很好:)。你可以在封面下看到,这总是一件值得学习的事情。
IL_0001:  ldstr       "a secret string"