我會建議返回一個過濾列表,而不是修改源,也是字符串「經營者」是一個C#的關鍵字,因此該方法的簽名可能是:
public List<T> ApplyFilter(string propertyName, EnumOperator operatorType, object value)
{
....
}
,我假設EnumOperator
是enum
有這樣的價值觀:
public enum EnumOperator
{
Equal,
NotEqual,
Bigger,
Smaller
}
和你有一些方法來檢查,如果操作員的值是通過還是未通過測試,沿着線的東西:
public static class OperatorEvaluator
{
public static bool Evaluate(EnumOperator operatorType, object first, object second)
{
...
}
}
鑑於這種情況,你可以這樣做:
public List<T> ApplyFilter(string propertyName , EnumOperator operatorType, object value)
{
PropertyInfo pi = typeof(T).GetProperty(propertyName);
List<T> result = sourceList.Where(item => {
var propValue = pi.GetValue(item, null);
return OperatorEvaluator.Evaluate(operatorType, propValue, value);
}).ToList();
return result;
}
這就是說,你可以隨時使用LINQ的方法,而不是訴諸反射來過濾幾乎所有的東西。
爲什麼你有一個泛型類的時候沒有做任何事情的通用? –
你試過了什麼? –
我已經採用泛型類,因爲我正在使用綁定T型數據源,其中數據來自不同的表格,我必須對其應用過濾器。 – Awadhendra