2009-06-10 62 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内で文字列比較が行われます。

しかし、2番目のスイッチの場合は、IL内で文字列比較が行われません。

誰でもこれを正当化できますか?

+0

これはどんなプログラミング言語ですか? –

+0

どの言語ですか? C#? –

+0

これは宿題の匂いが...不明な言語の宿題です。たぶんC++? – Eric

答えて

2

文字列にはindexerでアクセスしています。この文字列はcharを返すため、文字列を文字配列として使用できます。

あなたがしていることは、チャーの比較です。 'S'のアポストロフィーを使用すると、 'S'を文字列ではなく文字列として使用していることがわかります。

13

2番目のスイッチでは、文字列比較を行っていないため、Char比較を行っています。

2

文字列を使用していませんが、文字列を使用しています。したがって、文字列の比較はありません。

3

最も簡単な答えは、2番目のブロックで文字列比較を行っていないことです。あなたは2人のキャラクターを比較しています。

しかし、2つのコードブロックが機能的に同等であることは間違いありません。良い最適化コンパイラは、 's'が固定長の文字列であることを検出でき、完全な文字列比較を使用しないように書き直す必要があります。