C# 为什么要用“和”来表达&&引用;但不是",&&&引用;

C# 为什么要用“和”来表达&&引用;但不是",&&&引用;,c#,.net,expression-trees,C#,.net,Expression Trees,我有以下课程: public class Test { public string Text { get; set; } public int Number { get; set; } } 我正在这个类上创建类型为Expression的表达式树。当我这样做的时候: Expression<Func<Test, bool>> predicate1 = x => x.Text.Length > 5 && x.Number >


我有以下课程:

public class Test
{
    public string Text { get; set; }
    public int Number { get; set; }
}
我正在这个类上创建类型为
Expression
的表达式树。当我这样做的时候:

Expression<Func<Test, bool>> predicate1 = x => x.Text.Length > 5 && x.Number > 0;
    var y = Expression.Parameter(typeof(Test));

    var predicate2 = Expression.And(
        Expression.GreaterThan(
            Expression.Property(Expression.Property(y, "Text"), "Length"),
            Expression.Constant(5)),
    Expression.GreaterThan(
        Expression.Property(y, "Number"),
            Expression.Constant(0)));
我得到以下调试视图:

.Lambda #Lambda1<System.Func`2[NHLinqTest.Test,System.Boolean]>(NHLinqTest.Test $x) {
    ($x.Text).Length > 5 && $x.Number > 0
}
($var1.Text).Length > 5 & $var1.Number > 0
注意:对于和操作,有
。为什么在第二种情况下我会得到
&
?如何修改
谓词2
以获得
&
而不是
&


提前谢谢

因为它
&
-即按位/非短路“和”。对于
&&
您需要
表达式。并且也需要

另请参见
Expression.Or
|
)与
Expression.OrElse
|

另外,请注意
表达式
!=C#-它是独立于语言的,因此您可能还会看到一些情况,在这些情况下,您无法(直观地)从C#.

运算符和表达式中得到预期的结果。并且表示按位and。“&&”运算符和表达式。and还表示逻辑(和快捷)and运算符。

比较:

创建表示按位AND操作的二进制表达式

以及:

创建一个二进制表达式,该表达式表示仅当第一个操作数的计算结果为true时才计算第二个操作数的条件AND运算

然后将其与您对
&
&
运算符的了解进行比较