Search code examples
c#fluentvalidation

checking if parameter is one of 3 values with fluent validation


I have a class containing one string property:

public class Bla
{
    public string Parameter { get; set; }
}

I would like to write a custom AbstractValidator, which checks that Parameter is equal to either one of these strings:

str1, str2, str3

I guess this would be a starting point:

RuleFor(x => x.Parameter).Must(x => x.Equals("str1") || x.Equals("str2") || x.Equals("str3")).WithMessage("Please only use: str1, str2, str3");

but can I chain this and also show an error message, ideally without hard-coding the possibilities, e.g.:

Please only use: str1, str2, str3

Solution

  • You may do this with a list containing your conditions

    var conditions = new List<string>() { str1, str2, str3 };
    RuleFor(x => x.Parameter)
      .Must(x => conditions.Contains(x))
      .WithMessage("Please only use: " + String.Join(", ", conditions));