在下面的代码中,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);
}
我不明白为什么会发生这种事。根据简单的规则,x
是string?
类型,但在扩展方法中,它变成了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);
}