我正在使用FluentValidation对我的程序进行一些服务器端验证。为了利用一些自定义验证,我使用must
验证器,该验证器允许您传入谓词并返回布尔值以测试验证是否成功。我正在尝试的验证涉及检查数组中是否存在字符串。
这些细节基本上无关紧要,因为我只需要能够将谓词与第二个string[]
变量一起传递给方法。
以下是我的验证方法:
public bool StringInArray(Func<string> predicate, string[] testArray)
{
if(testArray.Contains(predicate.Invoke()))
{
return true;
}
return false;
}
这是我调用此方法的地方。
RuleFor(p => p.Funder)
.Must(StringInArray(p => p, funderStrings));
funderStrings
是我正在检查的谁的内容的数组。 p.Funder
是我要在数组内部检查的字符串。
p => p
参数不正确,并且我收到Delegate 'Func<string>' does not take 1 argument
编译错误。我不确定如何将字符串传递到StringInArray
方法中。
答案 0 :(得分:1)
您想要这个吗
public bool StringInArray(Func<string, string> conversion, string[] testArray)
{
if (testArray.Any((s) => s.Equals(conversion(s))))
{
return true;
}
return false;
}
...
RuleFor(p => p.Funder).Must(() => StringInArray(p => p, funderStrings));
或者这个:
public Func<bool> StringInArray(string s, string[] testArray)
{
return () => testArray.Contains(s);
}
...
RuleFor(p => p.Funder).Must(() => StringInArray(p => p, funderStrings));
请进一步详细说明您期望StringInArray
方法执行的操作,Must
方法接收并执行的操作