C# 使用自定义FluentValidator验证程序验证枚举
我创建了一个自定义验证器,用于测试值是否在枚举的有效值范围内:C# 使用自定义FluentValidator验证程序验证枚举,c#,unit-testing,testing,lambda,fluentvalidation,C#,Unit Testing,Testing,Lambda,Fluentvalidation,我创建了一个自定义验证器,用于测试值是否在枚举的有效值范围内: public class IsInEnumValidator<T> : PropertyValidator { public IsInEnumValidator() : base("Property {PropertyName} it not a valid enum value.") { } protected override bool IsValid(PropertyValidatorContext con
public class IsInEnumValidator<T> : PropertyValidator {
public IsInEnumValidator() : base("Property {PropertyName} it not a valid enum value.") { }
protected override bool IsValid(PropertyValidatorContext context) {
if (!typeof(T).IsEnum) return false;
return Enum.IsDefined(typeof(T), context.PropertyValue);
}
}
公共类IsInEnumValidator:PropertyValidator{
public IsInEnumValidator():base(“属性{PropertyName}它不是有效的枚举值。”){
受保护的覆盖布尔值有效(PropertyValidatorContext上下文){
如果(!typeof(T).IsEnum)返回false;
返回Enum.IsDefined(typeof(T),context.PropertyValue);
}
}
以及链接验证器的扩展方法:
public static IRuleBuilderOptions<T, TProperty> IsInEnum<T, TProperty>(this IRuleBuilder<T, TProperty> ruleBuilder) {
return ruleBuilder.SetValidator(new IsInEnumValidator<TProperty>());
}
公共静态IRuleBuilder选项IsInEnum(此IRuleBuilder规则生成器){
返回ruleBuilder.SetValidator(新的IsInEnumValidator());
}
我想这样使用它:
RuleFor(x => x.Day).IsInEnum<DayOfWeek>();
RuleFor(x=>x.Day).IsInEnum();
我的问题:
…IsInEnum()
而不是所需的…IsInEnum()代码>。我如何做到这一点
1:由于类型推断,实际上不需要在
IsInEnum()调用中指定任何内容
2:对于测试,该项目有很多测试,可以进行调整以适应此scneario。,因为6.2版IsInEnum是内置的。
从6.2.1开始,支持可为空的枚举
干杯