2

これは奇妙な魔法のようなもので、ContainsKey は false を返します。同じ結果で InvariantCulture 比較子を使用しようとしました。

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"));

間違い

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

4

1 に答える 1

3

一部の文字列の先頭にゼロ幅のスペース (U+200B) があります。たとえば、これをコピーします。

{"​Drop card", Drop},

ここでUnicode Explorerにアクセスすると、次のように表示されます。

Unicode エクスプローラー

さて、その文字がどこから来たのかはわかりませんが、別の場所からテキストをコピーして貼り付けていたのではないかと思います.

stringディクショナリの動作、または.NETの動作に問題がないことに注意してください。これは、ソース コードの問題にすぎません。同じ文字列をより明確に表現すると、まったく同じ動作が見られます。

{"\u200BDrop card", Drop},
于 2016-03-24T16:32:33.993 に答える