Написание атрибута аннотации сравнения для сравнения
У меня есть ситуация, когда я хочу сравнить с полями (например, убедиться, что время начала раньше времени окончания). Я'м, используяSystem.ComponentModel.DataAnnotations
атрибуты для моей проверки.
Моя первая мысль была примерно такой:
public enum CompareToOperation
{
EqualTo,
LessThan,
GreaterThan
}
public class CompareToAttribute : ValidationAttribute
{
CompareToOperation _Operation;
IComparable _Comparision;
public CompareToAttribute(CompareToOperation operation, Func comparison)
{
_Operation = operation;
_Comparision = comparison();
}
public override bool IsValid(object value)
{
if (!(value is IComparable))
return false;
switch (_Operation)
{
case CompareToOperation.EqualTo: return _Comparision.Equals(value);
case CompareToOperation.GreaterThan: return _Comparision.CompareTo(value) == 1;
case CompareToOperation.LessThan: return _Comparision.CompareTo(value) == -1;
}
return false;
}
}
public class SimpleClass
{
public DateTime Start {get;set;}
[CompareTo(CompareToOperation.GreaterThan, () => this.Start)] // error here
public DateTime End {get;set;}
}
Это неработать, тем не менее,Ошибка компилятора, когда атрибут помечен:
Expression cannot contain anonymous methods or lambda expressions
У кого-нибудь есть решение для этого? Или другой подход для проверки одного поля по сравнению со значением другого?