Example #1
0
        /// <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);
        }