我建议返回过滤列表而不是修改源,并且字符串“operator”是 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 的方法过滤几乎所有内容,而无需借助反射。