/// <summary> /// Initializes a new instance of the <see cref="ExtendedTypeInfo"/> class. /// </summary> /// <param name="t">The t.</param> public ExtendedTypeInfo(Type t) { Type = t ?? throw new ArgumentNullException(nameof(t)); IsNullableValueType = Type.GetTypeInfo().IsGenericType && Type.GetGenericTypeDefinition() == typeof(Nullable <>); IsValueType = t.GetTypeInfo().IsValueType; UnderlyingType = IsNullableValueType ? new NullableConverter(Type).UnderlyingType : Type; IsNumeric = NumericTypes.Contains(UnderlyingType); // Extract the TryParse method info try { TryParseMethodInfo = UnderlyingType.GetMethod(TryParseMethodName, new[] { typeof(string), typeof(NumberStyles), typeof(IFormatProvider), UnderlyingType.MakeByRefType() }) ?? UnderlyingType.GetMethod(TryParseMethodName, new[] { typeof(string), UnderlyingType.MakeByRefType() }); _tryParseParameters = TryParseMethodInfo?.GetParameters(); } catch { // ignored } // Extract the ToString method Info try { ToStringMethodInfo = UnderlyingType.GetMethod(ToStringMethodName, new[] { typeof(IFormatProvider) }) ?? UnderlyingType.GetMethod(ToStringMethodName, new Type[] { }); _toStringArgumentLength = ToStringMethodInfo?.GetParameters().Length ?? 0; } catch { // ignored } }