namespace System.Web.Mvc { using System; using System.Collections.Generic; using System.Globalization; public class DictionaryValueProvider : IValueProvider { private readonly HashSet _prefixes = new HashSet(StringComparer.OrdinalIgnoreCase); private readonly Dictionary _values = new Dictionary(StringComparer.OrdinalIgnoreCase); public DictionaryValueProvider(IDictionary dictionary, CultureInfo culture) { if (dictionary == null) { throw new ArgumentNullException("dictionary"); } AddValues(dictionary, culture); } private void AddValues(IDictionary dictionary, CultureInfo culture) { if (dictionary.Count > 0) { _prefixes.Add(""); } foreach (var entry in dictionary) { _prefixes.UnionWith(ValueProviderUtil.GetPrefixes(entry.Key)); object rawValue = entry.Value; string attemptedValue = Convert.ToString(rawValue, culture); _values[entry.Key] = new ValueProviderResult(rawValue, attemptedValue, culture); } } public virtual bool ContainsPrefix(string prefix) { if (prefix == null) { throw new ArgumentNullException("prefix"); } return _prefixes.Contains(prefix); } public virtual ValueProviderResult GetValue(string key) { if (key == null) { throw new ArgumentNullException("key"); } ValueProviderResult vpResult; _values.TryGetValue(key, out vpResult); return vpResult; } } }