Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解析表达式_C#_.net_Parsing - Fatal编程技术网

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