Я хочу создать собственный валидатор аннотаций данных, чтобы проверить, являются ли все элементы в списке уникальными или нет. Например
public class AnyClass{
[Unique]
public List<string> UniqueListOfStrings;
}
Теперь мой уникальный атрибут выглядит следующим образом
public sealed class UniqueAttribute : ValidationAttribute
{
public UniqueAttribute()
: base("The items are not unique")
{
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var listOfValues = (IList<object>)value;
return listOfValues.Count != listOfValues.Distinct().Count()
? new ValidationResult(ErrorMessageString)
: ValidationResult.Success;
}
}
До сих пор это нормально, но я хочу сделать атрибут более универсальным в том смысле, что я могу передать объект любого класса, реализующего IEqualityComparer<T>
. Таким образом, мой новый метод IsValid
будет выглядеть как
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var listOfValues = (IList<object>)value;
return listOfValues.Count !=
(_comparerClass != null
? listOfValues.Distinct(_comparerClass).Count()
: listOfValues.Distinct().Count())
? new ValidationResult(ErrorMessageString)
: ValidationResult.Success;
}
Проблема в том, что я не могу отправить объект. Есть ли обходной путь, чтобы я мог использовать класс сравнения, предназначенный для сравнения объектов.