gpt4 book ai didi

c# - 使用带有命名参数列表的 FluentValidation 的 WithMessage 方法

转载 作者:IT王子 更新时间:2023-10-29 04:53:06 25 4
gpt4 key购买 nike

我正在使用 FluentValidation,我想用对象的一些属性值来格式化消息。问题是我对 C# 中的表达式和委托(delegate)经验很少。

FluentValidation 已经提供了一种使用格式参数执行此操作的方法。

RuleFor(x => x.Name).NotEmpty()
.WithMessage("The name {1} is not valid for Id {0}", x => x.Id, x => x.Name);

我想做这样的事情,以避免在更改参数顺序时必须更改消息字符串。

RuleFor(x => x.Name).NotEmpty()
.WithMessage("The name {Name} is not valid for Id {Id}",
x => new
{
Id = x.Id,
Name = x.Name
});

原始方法签名如下所示:

public static IRuleBuilderOptions<T, TProperty> WithMessage<T, TProperty>(
this IRuleBuilderOptions<T, TProperty> rule, string errorMessage,
params Func<T, object>[] funcs)

我正在考虑为这个方法提供一个 Func 列表。

谁能帮我解决这个问题?

最佳答案

如果您使用的是 C# 6.0 或更高版本,这里有一个改进的语法。

在 8.0.100 或更高版本的 Fluent Validation 中,有一个 WithMessage 重载接受对象的 lambda,您可以这样做:

RuleFor(x => x.Name)
.NotEmpty()
.WithMessage(x => $"The name {x.Name} is not valid for Id {x.Id}.");

然而,对于 Fluent Validation 的早期版本,这种有点 hacky 的方式仍然非常干净,并且比 fork 其旧版本要好得多:

RuleFor(x => x.Name)
.NotEmpty()
.WithMessage("{0}", x => $"The name {x.Name} is not valid for Id {x.Id}.");

关于c# - 使用带有命名参数列表的 FluentValidation 的 WithMessage 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14167262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com