从一般方法获取其类型的属性

时间:2012-08-17 23:50:19

标签: c# generics methods

在业余时间,我正在创建一个小型业务框架,我可以将其重用于我的学校项目。我想这会像一个愚蠢的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);
    }
}

不使用泛型类型声明类?

欢迎任何其他提示。

2 个答案:

答案 0 :(得分:3)

  

我想知道是否可以做类似以下的事情:
  [...]
  不用泛型类型声明类?

不,这是不可能的。编译器和/或运行时如何知道属性声明的类型是什么?

答案 1 :(得分:0)

将规则类声明为泛型是唯一有用的方法,因为你需要在T泛型上设置约束

 public class Rule<T>
    {
        public Func<T, bool> ValidationRule { get; }
        public bool IsBroken<T>(T value)
        {
            return ValidationRule(value);
        }
    }