【发布时间】:2011-11-28 16:26:13
【问题描述】:
考虑这段代码:
static void Main(string[] args)
{
var persons = new List<Person>
{
new Person("Name1", "Surname1", 30),
new Person("Name2", "Surname2", 20),
new Person("Name3", "Surname3", 10)
};
var filters = new List<Func<Person, bool>>
{
p => p.Age > 10,
p => p.Surname.Contains("2")
};
var personsFiltered = new List<Person>(persons);
foreach (var filter in filters)
{
personsFiltered = personsFiltered.Where(filter).ToList();
}
foreach (var person in personsFiltered)
{
Console.WriteLine(person);
}
Console.ReadKey();
}
}
class Person
{
public string Name { get; private set; }
public string Surname { get; private set; }
public int Age { get; private set; }
public Person(string name, string surname, int age)
{
Name = name;
Surname = surname;
Age = age;
}
public override string ToString()
{
return String.Format("Name:{0}, Surname:{1}, Age:{2}", Name, Surname, Age);
}
}
是否可以将过滤器作为字符串参数传递,以便用户可以创建自定义过滤器?例如,我的示例中的 filters 列表最初为空,用户将提供字符串 "p => p.Age > 10" 和 "p => p.Surname.Contains(\"2")"?
【问题讨论】:
-
也许在您在代码中使用它们之前将字符串版本反序列化回一个对象?编辑:该字符串不起作用,需要采用序列化格式。
-
您可以使用动态 Linq 扩展 stackoverflow.com/questions/3991108/…
-
当你的用户给你
p => (p.Age / 0) == 2? (半开玩笑......)
标签: c#