在业余时间,我正在创建一个小型业务框架,我可以将其重用于我的学校项目。我想这会像一个愚蠢的CSLA,如果这可以给你一个想法。
虽然我对业务规则类有点麻烦。这就是现在的样子:
public class Rule
{
public string PropertyName { get; }
public string Description { get; }
public Func<object, bool> ValidationRule { get; }
public Rule(string propertyName, string message, Func<object, bool> validationRule)
{
this.PropertyName = propertyName;
this.Description = description;
this.ValidationRule = validationRule;
}
public bool IsBroken(object value)
{
return ValidationRule(value);
}
}
当我检查规则是否被破坏(值可以是任何类型)时,我不是拳击和拆箱的忠实粉丝。
当然,我可以让整个类变得通用,并让我的IsBroken函数接受类型为T的对象(可能比使用对象更好的想法),但我想知道是否可以做类似于以下内容:
public class Rule
{
public Func<T, bool> ValidationRule { get; }
public bool IsBroken<T>(T value)
{
return ValidationRule(value);
}
}
不使用泛型类型声明类?
欢迎任何其他提示。
答案 0 :(得分:3)
我想知道是否可以做类似以下的事情:
[...]
不用泛型类型声明类?
不,这是不可能的。编译器和/或运行时如何知道属性声明的类型是什么?
答案 1 :(得分:0)
将规则类声明为泛型是唯一有用的方法,因为你需要在T泛型上设置约束
public class Rule<T>
{
public Func<T, bool> ValidationRule { get; }
public bool IsBroken<T>(T value)
{
return ValidationRule(value);
}
}