フィールドと比較したい状況があります(たとえば、開始時刻が終了時刻より前であることを確認します)。System.ComponentModel.DataAnnotations
検証に属性を使用しています。
私の最初の考えは次のようなものでした:
public enum CompareToOperation
{
EqualTo,
LessThan,
GreaterThan
}
public class CompareToAttribute : ValidationAttribute
{
CompareToOperation _Operation;
IComparable _Comparision;
public CompareToAttribute(CompareToOperation operation, Func<IComparable> 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
誰かがこれに対する解決策を持っていますか?または、あるフィールドを別のフィールドの値と比較して検証するための別のアプローチですか?