1

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

没有用泛型类型声明类?

欢迎任何其他提示。

4

2 回答 2

3

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

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

于 2012-08-17T23:54:21.220 回答
0

将 Rule 类声明为泛型是唯一的方法,而且它对您来说很有趣,因为您需要对 T 泛型设置约束

 public class Rule<T>
    {
        public Func<T, bool> ValidationRule { get; }
        public bool IsBroken<T>(T value)
        {
            return ValidationRule(value);
        }
    }
于 2012-08-18T00:01:23.960 回答