2009-06-10 297 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'是一個固定長度的字符串,並重寫它不使用完整的字符串比較。