2016-12-28 2 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

Смежные вопросы