public static TAttribute FirstAttribute <TAttribute>(this PropertyInfo propertyInfo)
        {
            var attr = AttributeX.FirstAttribute(propertyInfo, typeof(TAttribute), true);

            return(attr != null ? (TAttribute)(object)attr : default(TAttribute));
            //return propertyInfo.AllAttributes<TAttribute>().FirstOrDefault();
        }
        public static TAttr FirstAttribute <TAttr>(this Type type) where TAttr : class
        {
            var attr = AttributeX.FirstAttribute(type, typeof(TAttr), true);

            return(attr != null ? (TAttr)(object)attr : default(TAttr));
            //return (TAttr)type.GetCustomAttributes(typeof(TAttr), true)
            //           .FirstOrDefault()
            //       ?? type.GetRuntimeAttributes<TAttr>().FirstOrDefault();
        }