/// <summary> /// Determines whether the specified object is null. /// </summary> public static bool IsNull <T>(this T arg) { #pragma warning disable IDE0041 // Use 'is null' check if (ReferenceEquals(null, arg)) { return(true); } #pragma warning restore IDE0041 // Use 'is null' check Type t = typeof(T); if (t.IsGenericType && ((t.IsGenericTypeDefinition && t.Equals(StaticTypes.nullableTypeDefinition)) || t.GetGenericTypeDefinition().Equals(StaticTypes.nullableTypeDefinition))) { PropertyInfo hasValueProperty = t.GetProperty("HasValue"); return(!(bool)hasValueProperty.GetValue(arg)); } if (NullTypes.Any(type => !(type is null) && t.IsAssignableFrom(type))) { return(true); } if (NullValues.Any(value => ReferenceEquals(value, arg) || arg.Equals(value) || (value is IEquatable <T> equatable && equatable.Equals(arg)))) { return(true); } return(false); }