public TypeConverter TryGet <T>(Type type) { TypeConverter typeConverter; if (type == null) { throw new ArgumentNullException(nameof(type)); } if (typeConverterCache.TryGetValue(typeof(T), out typeConverter)) { return(typeConverter); } typeConverter = typeConverterSource.TryGet <T>(type); if (typeConverter != null) { lock (typeConverterCache) if (!typeConverterCache.ContainsKey(typeof(T))) { typeConverterCache.Add(typeof(T), typeConverter); } } return(typeConverter); }
public T Convert <T>(Object instance) { if (instance == null) { return(default(T)); } if (instance == DBNull.Value) { return(default(T)); } var typeConverter = typeConverterSource.TryGet <T>(instance.GetType()); if (typeConverter == null) { throw new TypeConverterNotFoundException(instance.GetType(), typeof(T)); } return(typeConverter.Convert <T>(instance)); }