Extension方法中的When方法.Fluent验证



在下面的代码中,x的类型是string?,这是意料之中的,但如果我将Must更改为When,则x的类型为T

public static IRuleBuilderOptions<T, string?> Example<T>(this IRuleBuilder<T, string?> rule, int maximumLength = 100)
{
return rule
.Must(x => x?.Length > 0);
}

我不明白为什么会发生这种事。根据简单的规则,xstring?类型,但在扩展方法中,它变成了T,而行为相同(我想(的方法与预期的工作

RuleFor(x => x.Line)
.NotEmpty()
.When(x => x.Line?.Length > 0);

发现应该像这样完成

public static IRuleBuilderOptions<T, string?> Example<T>(this IRuleBuilder<T, string?> rule, int maximumLength = 100, Func<T, string?> str)
{
return rule
.When(x => str(x).Length > 0);
}

相关内容

最新更新