我有一个包含三个字段的 DTO 模型。

[Range(1, 100000)]
public Decimal? BonusRate { get; set; }
[Range(1, 100000)]
public Decimal? BonusGain { get; set; }
[Range(1, 100)]
public Decimal? BonusPercentage { get; set; }

在我的情况下,所有字段都是可选的,但如果设置了所有其他字段,也应该设置。我已经制定了一个决定,它运作良好,但看起来有点笨拙。
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{
    if (BonusRate.HasValue || BonusGain.HasValue || BonusPercentage.HasValue)
        if (!BonusRate.HasValue || !BonusGain.HasValue || !BonusPercentage.HasValue)
             yield return new ValidationResult("message");

}

有人知道更好的方法吗?

最佳答案

if (BonusRate.HasValue == BonusGain.HasValue && BonusGain.HasValue == BonusPercentage.HasValue)

或收集列表中的值并:
var isChecked = list.All(x => (x == list.First()));

关于c# - 使用数据注释对属性子集进行强制验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30102436/

10-11 20:45