2016-03-24 2 views
2

奇妙な魔法ですが、ContainsKeyはfalseを返します。私はInvariantCultureのcomparerを同じ結果で使用しようとしました。c#奇妙な辞書にはContainsKeyまたはStringComaprerが含まれています

GameCommands = new Dictionary<string, GameCommand>(StringComparer.Ordinal) 
      { 
       {"Start new game with deck", StartGame}, 
       {"​Tell color", TellColor}, 
       {"​Tell rank", TellRank}, 
       {"​Drop card", Drop}, 
       {"​Play card", Play}, 
      }; 
Debug.WriteLine(GameCommands.ContainsKey("Tell color")); 

私は、キーに引用符を削除し、再度入力して、それを解決します。私はなぜこれが起こっているのか知りたい。

答えて

3

文字列の先頭にゼロ幅のスペース(U + 200B)があります。 Unicode Explorer here

{"​Drop card", Drop}, 

、あなたはこのような何かわかります:たとえば、これをコピー今

Unicode explorer

を、私たちは、その文字がどこから来たのか知っているが、私はありませんテキストをコピーして別の場所から貼り付けると思われます。

辞書の動作に問題がないこと、またはstringまたは.NETの何か... ソースコードに問題があることに注意してください。あなたがより明確に同じ文字列を表現している場合は、まったく同じ動作を確認したい:

{"\u200BDrop card", Drop}, 
+0

'{ "\のu2008Dropカード"、ドロップ}、' ----> '{ "\のu200BDropカード"、ドロップ} 、 'あなたのテーブルを見て –

+0

@FelixCastor:Doh!ありがとう、固定。 –

関連する問題