/// <summary> /// 检查 /// </summary> public static void Check <T>(T item) where T : class { List <PropertyInfo> propertyInfos = item.GetType().GetProperties().Where(e => e.GetCustomAttributes <RequisiteAttribute>().Any()).ToList(); if (propertyInfos != null && propertyInfos.Count > 0) { foreach (PropertyInfo propertyInfo in propertyInfos) { RequisiteAttribute requisite = propertyInfo.GetCustomAttributes <RequisiteAttribute>().FirstOrDefault(); if (!requisite.CheckValueType) { if (propertyInfo.PropertyType.IsValueType) { continue; // 值类型跳过 } } dynamic defaultValue = propertyInfo.PropertyType.IsValueType ? Activator.CreateInstance(propertyInfo.PropertyType) : null; dynamic value = propertyInfo.GetValue(item); if (value == defaultValue) { if (requisite != null && !string.IsNullOrEmpty(requisite.Describe)) { throw new FormatException($"{propertyInfo.Name}为必填字段。必填原因为:{requisite.Describe}"); } else { throw new FormatException($"{propertyInfo.Name}为必填字段"); } } } } }
/// <summary> /// 比填字段检查 /// </summary> /// <typeparam name="T">检查对象</typeparam> /// <param name="source">检查数据</param> public static void RequisiteCheck <T>(this T source) where T : class { RequisiteAttribute.Check <T>(source); }