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