假设我有这个功能:
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());
}
显然上面的 secureSecret
可以是 const
,我应该费心把它改成 const
还是编译器足够聪明,知道这个?
最佳答案
如果查看生成的 IL,您会发现编译器没有创建新字符串,它只是调用 ldstr
:
IL_0001: ldstr "a secret string"
编译器足够聪明,可以将这个常量字符串“烘焙”到您正在创建的生成的 DLL/可执行文件中。
话虽如此,使用 const
传达了作者的意图,并增加了代码的清晰度并增强了 IMO 的可维护性。它稍后将允许您更轻松地重构这些“神奇”字符串,而不是将它们散布在代码库中的各处。
关于c# - C# 编译器会通过将 var 转换为 const 来优化此代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39701572/