c# - 是否存在适用于多个属性总和的现有验证规则,其中总和不是属性?
问题描述
假设我们有一个请求对象:
public class ExampleRequest {
public int? A { get; set; }
public int? B { get; set; }
public int? C { get; set; }
public int? D { get; set; }
...
}
并且存在 1 ≤ Sum(a, b, c, d) ≤ 10 的 API 规则。
- Sum(a, b, c, d) 必须至少为 1 且最多为 10。
我试过像这样实现这个规则:
RuleFor(x => x.A ?? 0 + x.B ?? 0 + x.C ?? 0 + x.D ?? 0)
.GreaterThan(0)
.LessThanOrEqualTo(10);
这条规则不起作用。
a) 我如何制定规则集来处理这种情况?
b)在这种情况下甚至可以创建规则——规则不一定应用于对象的属性,而是应用于多个属性的某些函数?
编辑:编辑代码块以表示错误的原因。
解决方案
您的错误是因为Operator priority。+
的优先级高于??
。这应该有效:
RuleFor(x => (x.a ?? 0) + (x.b ?? 0) + (x.c ?? 0) + (x.d ?? 0) )
.GreaterThan(0)
.LessThanOrEqualTo(10);
推荐阅读
- snappy - 是否有任何文章解压在 c# 中使用 snappy 压缩压缩的 avro 文件
- ruby-on-rails - 如何在设计中使用当前用户
- java - postgresql 寻找错误的列名
- node.js - 是否有在浏览器中运行的 git 客户端?
- android-studio - 吸管工具在 android studio 中不可点击
- css - 如何去除离子输入中有焦点线?
- java - java中的基本数据格式转换
- javascript - 单击“保存”时状态未更新
- python - 如何在`pandas`中合并部分多索引
- go - 致命错误:所有 goroutine 都处于休眠状态 - 死锁!当使用带有 for-select 循环的 WaitGroup 时