gpt4 book ai didi

c# - 过滤属性名称为字符串的模板列表

转载 作者:太空宇宙 更新时间:2023-11-03 19:18:47 25 4
gpt4 key购买 nike

您好,我必须对泛型类应用过滤器。示例类如下

public class Sample<T>
{
List<T> sourceList = new List<T>();

public void applyFilter(string propertyName , EnumOperator operator , object value)
{

}
}

在这里,我想使用 linq 或动态 linq 来实现过滤器,但没有得到任何积极的方向来实现这个功能。

请给我一些积极的方向,以便我可以实现此功能。

谢谢。

最佳答案

我建议返回一个过滤后的列表而不是修改源代码,而且字符串“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 的方法过滤几乎所有内容,而无需诉诸反射。

关于c# - 过滤属性名称为字符串的模板列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14067399/

25 4 0
文章推荐: python - Commands.getstatusoutput 失败,显示 sh : Syntax error: ";" unexpected
文章推荐: html - 绝对覆盖
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com