C# c语言中的布尔聚合模式#

C# c语言中的布尔聚合模式#,c#,.net,boolean,boolean-logic,C#,.net,Boolean,Boolean Logic,我正在编写一个小的查找应用程序,在那里我有一个方便的控制台,可以对缓存进行快速查询,以进行健全性检查等 i、 e 这将比从缓存中获取与该过滤器匹配的所有对象更有效 我可以应用更多的过滤器 get SomeField=Blue && SomeOtherField < 5 我能想到的唯一方法是使用正则表达式,然后将子字符串传递给设计用于创建特定过滤器的不同例程。(即AndEquals、OrEquals和Gratterthan等)看看IronPython。它很容易集成到c#应用

我正在编写一个小的查找应用程序,在那里我有一个方便的控制台,可以对缓存进行快速查询,以进行健全性检查等

i、 e

这将比从缓存中获取与该过滤器匹配的所有对象更有效

我可以应用更多的过滤器

get SomeField=Blue && SomeOtherField < 5

我能想到的唯一方法是使用正则表达式,然后将子字符串传递给设计用于创建特定过滤器的不同例程。(即AndEquals、OrEquals和Gratterthan等)

看看IronPython。它很容易集成到c#应用程序中,并且已经支持所有标准的过程语言结构。我在游戏引擎中使用它,在调试时对场景状态进行实时调整

您可以在这里使用类似于规范模式的东西

public interface ISpecification<T>
{
    bool IsSatisfiedBy(T instance);
    ISpecification<T> And(ISpecification<T> specification);
    ISpecification<T> Or(ISpecification<T> specification);
    ISpecification<T> Not(ISpecification<T> specification);
}
公共接口规范
{
布尔满足(T实例);
i规范和(i规范);
i规范或(i规范);
i规范非(i规范规范);
}

完整的工作示例

您不应该使用正则表达式执行此操作,您需要一个完整的解析器。看看ANTLR。

这很有趣,但不确定它是如何应用的。。我需要从一个长的输入字符串中分离出表达式。。这似乎是强类型谓词构建器。我恐怕你必须更准确地回答你的原始问题。正如David所提到的,似乎您可能希望通过DLR或C#4中的“动态”来研究某种动态语言功能。当然,您也可以疯狂地进行反射,并尝试找出您的用户想要什么这是一个很好的建议。在更大的C#应用程序中嵌入IronPython或Ruby“特定于域的语言”是非常强大的。。听起来不错,但我真的不想为这项任务学习新的语言:)你有没有什么特别的想法,我可以快速利用?
get ((field1=x || field1=y) && field2>x)
public interface ISpecification<T>
{
    bool IsSatisfiedBy(T instance);
    ISpecification<T> And(ISpecification<T> specification);
    ISpecification<T> Or(ISpecification<T> specification);
    ISpecification<T> Not(ISpecification<T> specification);
}