C# 解析表达式
我有一些集合C# 解析表达式,c#,.net,parsing,C#,.net,Parsing,我有一些集合列表称为“id”。我想允许用户为“ID”创建灵活的过滤器 我想创建一个文本框,用户必须在其中写入过滤器字符串。例如: item => item.ClassName == "Rectangle" 我需要的表达式适用于“ID”上的每个项目。我如何尝试解析它以进行验证?如何在代码中为每个“ID”项运行它?为什么不创建一个扩展列表的类,然后可以创建如下get方法: public class ObjectIdCollection : List<ObjectId> {
列表
称为“id”。我想允许用户为“ID”创建灵活的过滤器
我想创建一个文本框,用户必须在其中写入过滤器字符串。例如:
item => item.ClassName == "Rectangle"
我需要的表达式适用于“ID”上的每个项目。我如何尝试解析它以进行验证?如何在代码中为每个“ID”项运行它?为什么不创建一个扩展列表的类,然后可以创建如下get方法:
public class ObjectIdCollection : List<ObjectId>
{
public ObjectIdCollection() { }
public ObjectId this[string classname]
{
get
{
foreach(ObjectId id in this) if(id.ClassName == classname) return id;
return null;
}
}
}
公共类ObjectdCollection:列表
{
公共对象集合(){}
public ObjectId this[string classname]
{
得到
{
foreach(此处为ObjectId id)if(id.ClassName==ClassName)返回id;
返回null;
}
}
}
这将返回指定类名的第一个Id,如果没有找到,则返回null。您可以利用这些Id,因为它们有很多可用的
使用以下逻辑来解析和执行基于文本框(例如txtFilter
)的过滤器字符串
var ids = new List<ObjectId>
{
new ObjectId { ClassName = "Rectangle1", ID = 1 },
new ObjectId { ClassName = "Rectangle2", ID = 2 }
};
string code = txtFilter.Text; (Ex: "item => item.ClassName == \"Rectangle1\"" ;)
Func<ObjectId, bool> func = ExpressionParser.Compile<Func<ObjectId, bool>>(code);
ids.ForEach(obejctId =>
{
Console.WriteLine(func.Invoke(obejctId));
});
这是这样的:@Cuong Le这是类,不是结构。@BlackBear谢谢你的链接,但我不知道如何从字符串解析表达式。向用户公开这样的功能安全吗?不,筛选器的表达式可以是任意的。用户必须通过文本框进行设置。我必须用它来表达。是的,我想,这是我必须要做的!谢谢大家!@布什:你可以先打电话给AsQueryable()非常感谢!这就是我需要的。
True
False