2016-12-28 4 views
-1

documentationには、「ルートフレームワークのさまざまな場所で使用するキー/値ペアの大文字と小文字を区別しないコレクションを表します。ルートの既定値を定義するときや、ルートに基づいています。RouteValueDictionaryクラスのキーは大文字と小文字を区別しませんか?

私が見ることができるところからは、普通のDictionary<string,object>を使って内部的に鍵を保存するので、実際には大文字と小文字が区別されます。私は大文字小文字を区別しないこのクラスの側面を見つけることができないので、ドキュメントは間違っていますか?

答えて

1

Dictionary<string, object>を使用すると、大文字と小文字の区別が正しく行われません。 Dictionary<TKey, TValue>は、カスタムのIEqualityComparer<TKey>実装がコンストラクタに提供されることを可能にする。 RouteValueDictionaryはまさにそれとStringComparer.OrdinalIgnoreCaseDictionary<string, object>にコンストラクタ渡さん:だから、質問に答えるために

public class RouteValueDictionary : IDictionary<string, object> { 
    private Dictionary<string, object> _dictionary; 

    public RouteValueDictionary() { 
     _dictionary = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase); 
    } 

    public RouteValueDictionary(object values) { 
     _dictionary = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase); 

     AddValues(values); 
    } 

    public RouteValueDictionary(IDictionary<string, object> dictionary) { 
     _dictionary = new Dictionary<string, object>(dictionary, StringComparer.OrdinalIgnoreCase); 
    } 

を:RouteValueDictionaryは大文字と小文字を区別しません。

ソースコードのコードを参照してください。https://referencesource.microsoft.com/#System.Web/Routing/RouteValueDictionary.cs,551a423c96bb6648

関連する問題