RouteValueDictionary类的键是否不区分大小写?

时间:2016-12-28 15:50:59

标签: asp.net asp.net-mvc routevalues

documentation表示它"表示您在路由框架中的各个位置使用的不区分大小写的键/值对集合,例如您定义时路由的默认值,或者当您生成基于路由的URL时。"

从我所看到的,它使用普通的CreateNewWeapon在内部存储它的密钥,因此它实际上区分大小写。我发现这个类的任何方面都不区分大小写,文档错误了吗?

1 个答案:

答案 0 :(得分: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