我遇到了一项看似非常简单的任务,但却陷入困境。我有一个类层次结构,其中每个类都可以定义自己的验证规则。定义验证规则应尽可能简单。以下是几乎需要的内容:
这里还需要一件事情-在添加验证规则时需要类型安全。否则,每个子类都必须进行看起来很奇怪的强制转换。理想情况下,
class HierarchyBase
{
private List<Func<object, bool>> rules = new List<Func<object, bool>>();
public int fieldA = 0;
public HierarchyBase()
{
AddRule(x => ((HierarchyBase)x).fieldA % 2 == 0);
}
protected virtual void Operation()
{
fieldA++;
}
protected void AddRule(Func<object, bool> validCriterion)
{
rules.Add(validCriterion);
}
public void PerformOperation()
{
Operation();
Validate();
}
protected virtual void Operation()
{
fieldA++;
}
private void Validate()
{
IsValid = rules.All(x => x(this));
}
public bool IsValid
{
get;
private set;
}
}
这里还需要一件事情-在添加验证规则时需要类型安全。否则,每个子类都必须进行看起来很奇怪的强制转换。理想情况下,
Func<T, bool>
可以工作,但是这里有一堆问题:我们不能从任何 IValidatable<HierarchyBase>
类继承我们的 HierarchyBase
,因为继承层次可以是 N 级深(是的,我也感受到了那种味道);在 rules
中存储任何具体的 Func<HierarchyBaseInheritor, bool>
并遍历它们。
你会如何在这里引入类型安全?
HierarchyBase<T>
中使用Func<T, bool>
有什么问题吗? - TheCodeKing