C# FluentValidation及其属性的对象集合应是唯一的
我有课:C# FluentValidation及其属性的对象集合应是唯一的,c#,fluentvalidation,C#,Fluentvalidation,我有课: Sponsored { int Order }; 我收集了一些: IEnumerable<Sponsored> sponsored; 及 公共类赞助商CollectionValidator:AbstractValidator { 私有类发起的比较程序:IEqualityComparer { 公共布尔等于(赞助x,赞助y)=>x?顺序==y?顺序; public int GetHashCode(赞助对象)=>对象顺序; } 公共赞助的CollectionValidato
Sponsored { int Order };
我收集了一些:
IEnumerable<Sponsored> sponsored;
及
公共类赞助商CollectionValidator:AbstractValidator
{
私有类发起的比较程序:IEqualityComparer
{
公共布尔等于(赞助x,赞助y)=>x?顺序==y?顺序;
public int GetHashCode(赞助对象)=>对象顺序;
}
公共赞助的CollectionValidator()
{
规则(coll=>coll)
.Must(coll=>coll.Distinct(新发起的比较器()).Count()==coll.Count())
.WithMessage(“元素不是唯一的”);
}
}
这种Guid比较器的作用是什么?无法将类型为“赞助商”的对象强制转换为类型为“System.Collections.Generic.IEnumerable`1[Sponsorted]”。,是您的基本类型抽象验证器
?如果它只是AbstractValidator
,那么coll
就不是一个集合,而是一个赞助的
实例。从何处获得此错误?它不会将ModelState.IsValid修改为false。ModelState.IsValid
仅在MVC中工作,您必须在应用程序的启动方法中调用FluentValidationModelValidatorProvider.Configure()
。顺便说一句,我从来没用过。手动方式应该始终有效:var validationResult=new-SponsoredCollectionValidator().Validate(myCollection);bool isValid=validationResult.isValid代码>
SponsoredValidator : AbstractValidator<IEnumerable<Sponsored>>
SponsoredValidator : AbstractValidator<Sponsored>
[Validator(typeof(SponsoredValidator))]
public class SponsoredCollectionValidator : AbstractValidator<IEnumerable<Sponsored>>
{
private class SponsoredComparer : IEqualityComparer<Sponsored>
{
public bool Equals(Sponsored x, Sponsored y) => x?.Order == y?.Order;
public int GetHashCode(Sponsored obj) => obj.Order;
}
public SponsoredCollectionValidator()
{
RuleFor(coll => coll)
.Must(coll => coll.Distinct(new SponsoredComparer()).Count() == coll.Count())
.WithMessage("Elements are not unique.");
}
}