-1

文档指出它“表示您在路由框架中的各个位置使用的不区分大小写的键/值对集合,例如当您定义路由的默认值或生成基于路线。”

据我所知,它使用法线Dictionary<string,object>在内部存储它的密钥,所以它实际上是区分大小写的。我找不到此类不区分大小写的任何方面,所以文档是错误的吗?

4

1 回答 1

2

您关于 usingDictionary<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不区分大小写。

请参阅 sourceof.net 上的代码:https ://referencesource.microsoft.com/#System.Web/Routing/RouteValueDictionary.cs,551a423c96bb6648

于 2016-12-28T15:53:56.557 回答