在某些编程语言中,所有字符串都有一个 @ 前缀,即 var foo = @"this is a test";
如果字符串没有 @ 前缀,.NET 框架是否需要做额外的工作?是否需要进行任何扫描?我很好奇我们应该在所有可能的字符串上使用@?
从 MSIL 的角度来看,没有区别
string test = @"\test1";
string test2 = "test2";
IL_0001: ldstr "\test1"
IL_0006: stloc.0
IL_0007: ldstr "test2"
IL_000C: stloc.1
使用逐字字符串可能会或可能不会更快,您甚至可能无法通过为编译器提供特制程序来测量。在任何情况下,此处理都发生在编译时,这使得所有相关工作“免费”。因此,从这个角度来看,绝对没有支持或反对逐字字符串的论据。
也就是说,我已经看到开发工具将非逐字字符串视为本地化的候选者——在这种情况下,在适当的情况下使用逐字字符串确实有一些价值。