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 に答える