2016-12-28 45 views
-1

documentation指出它「代表不區分大小寫您在路由框架的各個位置使用的鍵/值對的集合,例如,當您爲路由定義默認值或生成URL時基於路線。「RouteValueDictionary類的鍵是否區分大小寫?

從我所看到的,它使用正常的Dictionary<string,object>在內部存儲它的密鑰,所以它實際上區分大小寫。我找不到這個類不區分大小寫的任何方面,那麼這個文檔就錯了?

回答

1

您聲明使用Dictionary<string, object>會使比較區分大小寫不正確。 Dictionary<TKey, TValue>允許將自定義的IEqualityComparer<TKey>實現提供給構造函數。 RouteValueDictionary正是這麼做的,並傳遞給StringComparer.OrdinalIgnoreCase構造Dictionary<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不區分大小寫。

請參閱sourceof.net上的代碼:https://referencesource.microsoft.com/#System.Web/Routing/RouteValueDictionary.cs,551a423c96bb6648