When 方法在扩展方法中。流利验证

发布于 2025-01-16 09:45:27 字数 638 浏览 1 评论 0原文

下面的代码中的 xstring? 类型,这是预期的,但是如果我将 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,而行为相同的方法(I猜测)按预期工作

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

in the code below x is of type string? which is expected, but if I change Must to When then x is of type T

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

I can not figure why this is happening. On simple rules it works, x is of type string?, but in extension method it becomes T, while methods that behave the same(I guess) work as expected

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

最好是你 2025-01-23 09:45:27

发现应该这样做

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);
        }

Found that is should be done like this

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);
        }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文