我在業餘時間製作一個對象驗證框架來學習一些東西,並可能將它用於一些學校項目。同一列表中的多個泛型類型並調用它們的方法
我有我的通用規則類,它看起來是這樣的:
class Rule<T>
{
string propertyName;
Func<T, bool> ruleLambda;
bool IsBroken(T value)
{
return ruleLambda(value);
}
}
將被驗證看起來有點像這樣的對象:
class Example
{
List<Rule<?>> MyRules; // can take all types of rules
List<Rule<T>> Validate<T>(string propertyName, T value)
{
List<Rule<T>> brokenRules = new List<Rule<T>>();
foreach (Rule rule in MyRules.Where(r => r.propertyName == propertyName))
{
if (rule.IsBroken(value))
brokenRules.Add(rule);
}
return brokenRules;
}
}
凡T value
論證會其中一個Example類的屬性值,可以是任何類型的值。
只要設置了屬性,就會調用Validate<T>
方法。
問題在於班級的規則列表。具體是上面的List<Rule<?>>
行。我想將給定類的所有規則存儲在同一個列表中。
唉,C#沒有像Java一樣的泛型類型的通配符。
我該怎麼做?
使用對象而不是T的非泛型接口或基類可以工作,但我該如何調用泛型規則的IsBroken
方法而不是非泛型方法?
定義一個接口IRule,帶有非通用接口,例如'布爾IsBroken(物體)',並有'規則:IRule',並有'列表'..好吧,它不是很漂亮,但它*工作,是我見過的最好的。 –
2012-08-25 20:34:55