Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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# - Fatal编程技术网

C# 二进制表达式组合

C# 二进制表达式组合,c#,C#,我想在二进制表达式中组合条件列表。问题是我希望所有条件都处于同一级别,这样: 真==真与真==真与真==真与真==真与真==真或真==假与真==真与真==真与真==真与真==真与真==真或真==真 var currentExpr = this.MakeExpression(list.First()); foreach (bool obj in list.Skip(1)) { var nextExpr = this.MakeExpression(obj); switch (type

我想在二进制表达式中组合条件列表。问题是我希望所有条件都处于同一级别,这样:

真==真与真==真与真==真与真==真与真==真或真==假与真==真与真==真与真==真与真==真与真==真或真==真

var currentExpr = this.MakeExpression(list.First());
foreach (bool obj in list.Skip(1))
{
    var nextExpr = this.MakeExpression(obj);
    switch (type)
    {
        case 1: // And
            currentExpr = Expression.And(currentExpr, nextExpr);
            break;
        case 2: // Or
            currentExpr = Expression.Or(currentExpr, nextExpr);
            break;
    }
}


private BinaryExpression MakeExpression(bool value)
{
    BinaryExpression expression = Expression.Equal(Expression.Constant(true),Expression.Constant(value));
    return expression;
}
但表达式是生成的:

()(((((()(((真==真)和(真==真))和(真==真)和(真==真)和(真==真))或(真==真))


您可以通过延迟
来处理优先级:

var andExprs = new List<BinaryExpression>();
andExprs.Add(this.MakeExpression(list.First()));
foreach (bool obj in list.Skip(1))
{
    var nextExpr = this.MakeExpression(obj);
    switch (type)
    {
        case 1: // And
            andExprs[andExprs.Count-1] = Expression.And(andExprs[andExprs.Count-1], nextExpr);
            break;
        case 2: // Or
            andExprs.Add(nextExpr);
            break;
    }
}

var currentExpr = andExprs.First();
foreach (var expr in andExprs.Skip(1))
{
    currentExpr = Expression.Or(currentExpr, expr);
}
var andExprs=newlist();
andExprs.Add(this.MakeExpression(list.First());
foreach(列表中的bool obj.Skip(1))
{
var nextExpr=this.MakeExpression(obj);
开关(类型)
{
案例1://和
andExprs[andExprs.Count-1]=表达式和(andExprs[andExprs.Count-1],nextExpr);
打破
案例2://或
andExprs.Add(nextExpr);
打破
}
}
var currentExpr=andExprs.First();
foreach(在andExprs.Skip(1)中的var expr)
{
currentExpr=表达式或(currentExpr,expr);
}

我现在无法测试代码,因此可能会出现输入错误(是否
和xprs.Count
需要
和xprs.Count()
?),但这应该会给您提供大致的想法。

您是否尝试过
?这些都是在同一个层次上的。是的,发生了同样的问题。我不明白这个问题。必须有一些优先权。隐式或显式地。就像在c#中编写条件语句一样,我也质疑您希望如何处理运算符优先级,例如,使用here is what find(禁用换行以使其正确显示)可能我遗漏了什么。如果所有表达式都在同一级别上,那么通常的C#运算符优先级不适用吗?然后,将在
s之前执行
s。