我可以在lambda RuleFor中使用函数吗?

时间:2019-06-06 12:24:29

标签: c# .net fluentvalidation

在文档中

  

要为特定属性指定验证规则,请调用RuleFor方法,并传递一个表示要验证的属性的lambda表达式。

这是否意味着我必须仅在lambda中编写属性?

我可以使用扩展方法IsSomeCheck()吗?

RuleFor的代码风格是否更重要?

 RuleFor(x => x.IsSomeCheck())
              .NotEqual(true)
              .WithMessage("Some Text!");

例如,我有

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    bool BeAverageHumanAge()
    {
      return (Age >= 0 && Age <= 100);
    }
}

所以

RuleFor(x => x.BeAverageHumanAge())
              .NotEqual(true)
              .WithMessage("Some Text!");

这是非法的吗?

1 个答案:

答案 0 :(得分:1)

RuleFor方法的lambda中,我们指定要在其上进行验证的属性。例如, 考虑一个叫做Person-

的类
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

如果您希望验证Person实例的使用期限,则可以编写如下规则:

RuleFor(x => x.Age)
              .GreaterThan(0)      // in-built validator method
              .WithMessage("Age must be greater than 0");

假设您希望添加一些自定义年龄检查,那么您可以为此编写自己的方法。像这样:

bool BeAverageHumanAge(int age)
{
    if(age >= 0 && age <= 100)
        return true;
    return false;
}

此方法可用于验证年龄,例如:

RuleFor(x => x.Age)
              .Must(BeAverageHumanAge)      // invoking custom validation method
              .WithMessage("Age does not lie in average human age range");