Xamarin Public Jenkins (auto-signing) e79aa3c0ed Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
2016-08-03 10:59:49 +00:00

48 lines
1.6 KiB
C#

namespace System.Web.ModelBinding {
using System;
using System.Collections.Generic;
using System.Globalization;
public class DictionaryValueProvider<TValue> : IValueProvider {
private readonly PrefixContainer _prefixes;
private readonly Dictionary<string, ValueProviderResult> _values = new Dictionary<string, ValueProviderResult>(StringComparer.OrdinalIgnoreCase);
public DictionaryValueProvider(IDictionary<string, TValue> dictionary, CultureInfo culture) {
if (dictionary == null) {
throw new ArgumentNullException("dictionary");
}
_prefixes = new PrefixContainer(dictionary.Keys);
AddValues(dictionary, culture);
}
private void AddValues(IDictionary<string, TValue> dictionary, CultureInfo culture) {
foreach (var entry in dictionary) {
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.ContainsPrefix(prefix);
}
public virtual ValueProviderResult GetValue(string key) {
if (key == null) {
throw new ArgumentNullException("key");
}
ValueProviderResult vpResult;
_values.TryGetValue(key, out vpResult);
return vpResult;
}
}
}