Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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#.NET中的显式字符串对框架是否更有效?_C#_.net - Fatal编程技术网

C#.NET中的显式字符串对框架是否更有效?

C#.NET中的显式字符串对框架是否更有效?,c#,.net,C#,.net,在某些编程语言中,所有字符串都有一个@前缀,即var foo=@“这是一个测试” 如果字符串没有@前缀,.NET framework是否需要做额外的工作?是否需要进行任何扫描?我很好奇我们是否应该在所有可能的字符串上使用@?使用逐字字符串的速度可能会更快,也可能不会更快,这是您甚至无法通过输入编译器精心编制的程序来衡量的。在任何情况下,这种处理都发生在编译时,这使得所有相关的工作都“空闲”。所以从这个角度来看,绝对没有支持或反对逐字字符串的论据 这样说,我看到开发工具把非逐字字符串看作本地化的候

在某些编程语言中,所有字符串都有一个@前缀,即var foo=@“这是一个测试”


如果字符串没有@前缀,.NET framework是否需要做额外的工作?是否需要进行任何扫描?我很好奇我们是否应该在所有可能的字符串上使用@?

使用逐字字符串的速度可能会更快,也可能不会更快,这是您甚至无法通过输入编译器精心编制的程序来衡量的。在任何情况下,这种处理都发生在编译时,这使得所有相关的工作都“空闲”。所以从这个角度来看,绝对没有支持或反对逐字字符串的论据


这样说,我看到开发工具把非逐字字符串看作本地化的候选对象,在这种情况下,使用一个逐字串,在适当的情况下确实有一定的价值。

< P>从MSIL的观点看,

没有区别。
string test = @"\test1";
string test2 = "test2";


IL_0001:  ldstr       "\test1"
IL_0006:  stloc.0     
IL_0007:  ldstr       "test2"
IL_000C:  stloc.1     

我甚至不会说(微不足道的)额外工作。如果我没有弄错的话,它只是意味着lexer的另一部分使用字符串文本。由于lexer是典型的有限自动机,字符串的长度应该决定性能,而不是哪个标记匹配。@delnan:理论上,我想这两种类型的字符串应该是不同的标记,在这种情况下,lexer可能会有更多的
if(nextChar==something)
测试在非逐字的情况下进行。在那里谈论性能有点荒谬(特别是因为lex还有非字符串文字部分),但我不想在回答中使用“荒谬”。)我同意,但对表演进行疯狂的猜测是非常诱人的。无论如何,任何这样的猜测都必须对实现进行大量假设。因此,让我们把它放在“它可能会更快,也可能不会更快,你甚至无法用病理输入来测量它的速度”。@delnan:编辑了答案。谢谢你的意见!旁注:若并没有区别,那个么你们就不应该随意使用@,因为这将是毫无意义的视觉混乱。并没有区别,只是语法上的甜点。正如Jon所说,当它有助于避免大量逃逸或抑制恼人的Resharper的本地化警告时,使用它是有意义的。