public static Func <string, T> GetDefaultConverter <T>() //TODO: nasty. Way that doesn't compromise compile-time type safety? { object converter; return(DefaultConverters.TryGetValue(typeof(T), out converter) ? (Func <string, T>)converter : DefaultDotNet <T>()); }