2009-06-10 249 views
0

场景字符串比较

请考虑以下代码片段。

 string s = "S"; 
     string s1 = "S"; 
     string s2 = string.Empty; 
     switch (s) 
     { 
      case "S": 
       s1 = "StringComparison"; 
       break; 
      default: 
       break; 
     } 

     switch (s[0]) 
     { 
      case'S': 
       s2 = "StringCOmpare2"; 
       break; 
      default: 
       break; 
     } 

第一个开关的情况下,导致IL内的字符串比较。

但第二个开关情况下,不会导致IL内的字符串比较。

任何人都可以证明这一点?

+0

这应该是什么编程语言? – 2009-06-10 11:59:20

回答

2

您正在通过其indexer访问该字符串,该字符串返回一个字符,因此可以使用该字符串,就好像它是一个字符数组。

所以你正在做的是一个字符比较。使用'S'的撇号还会告诉您,您将'S'用作字符而不是字符串。

13

因为在第二个开关上你没有进行字符串比较,所以你正在做一个Char比较。

2

你的第二个switch语句中没有使用,但单一的字符。因此,没有字符串比较。

3

最简单的答案是,你没有在第二个块中进行字符串比较;你正在比较两个字符。

但是,你说得对,因为这两个代码块在功能上是等效的。一个好的优化编译器应该能够检测到's'是一个固定长度的字符串,并重写它不使用完整的字符串比较。