2016-03-24 20 views
2

Bu bir çeşit garip sihir, ContainsKey yanlış döndürür. Aynı sonuçla InvariantCulture karşılaştırmasını kullanmaya çalıştım.C# garip Sözlük İçerirKey veya 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")); 

Yanlış

Ben anahtarları tırnak çıkarıp yeniden yazarak bunu çözmek. Bunun neden olduğunu bilmek istiyorum.

cevap

3

Dizelerinizin bazılarında sıfır genişlikli boşluklara (U + 200B) sahipsiniz. Unicode Explorer here içine

{"​Drop card", Drop}, 

ve böyle bir şey göreceksiniz: Örneğin, bu kopya o karakter nereden geldiğini

Şimdi Unicode explorer

, bilmiyoruz, ama ben metni başka bir yerden kopyalayıp yapıştırdığınızdan şüpheleniyorsunuz.

Sözlüğün veya string veya .NET'teki herhangi bir öğenin davranışında bir sorun olmadığını unutmayın. Bu, yalnızca kaynak kodunuzda bir sorun. daha net aynı dizeyi ifade eğer tam olarak aynı davranışı görmek istiyorum:

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

'{ "\ u2008Drop kart", Damla},' ----> '{ "\ u200BDrop kart", Damla} , 'tablonuza bakıyor –

+0

@FelixCastor: Doh! Teşekkürler, düzeltildi. –