Expression.AndAlso 方法

定义

创建一个 BinaryExpression,它表示仅在第一个操作数的计算结果为 AND 时才计算第二个操作数的条件 true 运算。

重载

AndAlso(Expression, Expression, MethodInfo)

创建一个 BinaryExpression,它表示仅在第一个操作数解析为 true 时,才计算第二个操作数的条件 AND 运算。 可指定实现方法。

AndAlso(Expression, Expression)

创建一个 BinaryExpression,它表示仅在第一个操作数的计算结果为 AND 时才计算第二个操作数的条件 true 运算。

AndAlso(Expression, Expression, MethodInfo)

Source:
BinaryExpression.cs
Source:
BinaryExpression.cs
Source:
BinaryExpression.cs

创建一个 BinaryExpression,它表示仅在第一个操作数解析为 true 时,才计算第二个操作数的条件 AND 运算。 可指定实现方法。

public:
 static System::Linq::Expressions::BinaryExpression ^ AndAlso(System::Linq::Expressions::Expression ^ left, System::Linq::Expressions::Expression ^ right, System::Reflection::MethodInfo ^ method);
public static System.Linq.Expressions.BinaryExpression AndAlso (System.Linq.Expressions.Expression left, System.Linq.Expressions.Expression right, System.Reflection.MethodInfo method);
public static System.Linq.Expressions.BinaryExpression AndAlso (System.Linq.Expressions.Expression left, System.Linq.Expressions.Expression right, System.Reflection.MethodInfo? method);
static member AndAlso : System.Linq.Expressions.Expression * System.Linq.Expressions.Expression * System.Reflection.MethodInfo -> System.Linq.Expressions.BinaryExpression
Public Shared Function AndAlso (left As Expression, right As Expression, method As MethodInfo) As BinaryExpression

参数

left
Expression

要将 Expression 属性设置为与其相等的 Left

right
Expression

要将 Expression 属性设置为与其相等的 Right

method
MethodInfo

要将 MethodInfo 属性设置为与其相等的 Method

返回

一个 BinaryExpression,其 NodeType 属性等于 AndAlso,并且其 LeftRightMethod 属性设置为指定值。

例外

leftrightnull

method 不是 null,它所表示的方法返回 void,而不是 static(Visual Basic 中为 Shared),或者并非采用两个参数。

methodnull,且没有为 left.Type 和 right.Type 定义按位 AND 运算符。

- 或 -

methodnull 并且 left.Type 和 right.Type 不是同一布尔值类型。

注解

生成的 BinaryExpressionMethod 属性设置为 实现方法。 属性 Type 设置为节点的类型。 如果节点已提升,则 IsLiftedIsLiftedToNull 属性均为 true。 否则,它们为 falseConversion 属性为 null

以下信息介绍了实现方法、节点类型以及是否提升节点。

实现方法

根据以下规则选择操作的实现方法:

  • 如果 method 不是 null ,它表示非 void, static (Shared Visual Basic) 方法中采用两个参数,则它是节点的实现方法。

  • 否则,如果 Typerightleft 属性表示重载按AND位运算符的用户定义类型,MethodInfo则表示该方法的 就是实现方法。

    注意

    不能在 C# 或 Visual Basic 中重载条件 AND 运算符。 但是,使用按AND位运算符计算条件AND运算符。 因此,按 AND 位运算符的用户定义重载可以是此节点类型的实现方法。

  • 否则,如果 为 ,则为 left。键入 和 right。类型是布尔类型,实现方法是 null

节点类型和提升与非提升

如果实现方法不是 null

  • 如果 left为 。键入 和 right。类型可分配给实现方法的相应参数类型,节点不会提升。 节点的类型是实现方法的返回类型。

  • 如果满足以下两个条件,则会提升节点,节点的类型是对应于实现方法的返回类型的可为空类型:

    • left.键入 和 right。类型都是值类型,其中至少有一种可为空,相应的不可为 null 类型等于实现方法的相应参数类型。

    • 实现方法的返回类型是不可为 null 的值类型。

如果实现方法是 null

  • left.键入 和 right。类型是相同的布尔类型。

  • 如果 left为 。键入 和 right。类型不可为空,节点不提升。 节点的类型是预定义条件 AND 运算符的结果类型。

  • 如果 left为 。键入 和 right。类型可为 null,节点已解除。 节点的类型是对应于预定义条件 AND 运算符的结果类型的可为 null 类型。

适用于

AndAlso(Expression, Expression)

Source:
BinaryExpression.cs
Source:
BinaryExpression.cs
Source:
BinaryExpression.cs

创建一个 BinaryExpression,它表示仅在第一个操作数的计算结果为 AND 时才计算第二个操作数的条件 true 运算。

public:
 static System::Linq::Expressions::BinaryExpression ^ AndAlso(System::Linq::Expressions::Expression ^ left, System::Linq::Expressions::Expression ^ right);
public static System.Linq.Expressions.BinaryExpression AndAlso (System.Linq.Expressions.Expression left, System.Linq.Expressions.Expression right);
static member AndAlso : System.Linq.Expressions.Expression * System.Linq.Expressions.Expression -> System.Linq.Expressions.BinaryExpression
Public Shared Function AndAlso (left As Expression, right As Expression) As BinaryExpression

参数

left
Expression

要将 Expression 属性设置为与其相等的 Left

right
Expression

要将 Expression 属性设置为与其相等的 Right

返回

一个 BinaryExpression,其 NodeType 属性等于 AndAlso,并且其 LeftRight 属性设置为指定值。

例外

leftrightnull

没有为 left.Type 和 right.Type 定义按位 AND 运算符。

- 或 -

left.Type 和 right.Type 不是同一布尔值类型。

示例

下面的代码示例演示如何创建一个表达式,该表达式仅在第一个操作数的计算结果为 true时对其两个操作数执行逻辑 AND 操作。

// Add the following directive to your file:
// using System.Linq.Expressions;

// This expression perfroms a logical AND operation
// on its two arguments, but if the first argument is false,
// then the second arument is not evaluated.
// Both arguments must be of the boolean type.
Expression andAlsoExpr = Expression.AndAlso(
    Expression.Constant(false),
    Expression.Constant(true)
);

// Print out the expression.
Console.WriteLine(andAlsoExpr.ToString());

// The following statement first creates an expression tree,
// then compiles it, and then executes it.
Console.WriteLine(Expression.Lambda<Func<bool>>(andAlsoExpr).Compile()());

// This code example produces the following output:
//
// (False AndAlso True)
// False
' Add the following directive to your file:
' Imports System.Linq.Expressions  

' This expression performs a logical AND operation
' on its two arguments, but if the first argument is false,
' the second argument is not evaluated.
' Both arguments must be of the Boolean type.
Dim andAlsoExpr As Expression = Expression.AndAlso(
     Expression.Constant(False),
     Expression.Constant(True)
 )

' Print the expression.
Console.WriteLine(andAlsoExpr.ToString())

' The following statement first creates an expression tree,
' then compiles it, and then executes it. 
Console.WriteLine(Expression.Lambda(Of Func(Of Boolean))(andAlsoExpr).Compile()())

' This code example produces the following output:
'
' (False AndAlso True)
' False

注解

生成的 BinaryExpressionMethod 属性设置为 实现方法。 属性 Type 设置为节点的类型。 如果节点已提升,则 IsLiftedIsLiftedToNull 属性均为 true。 否则,它们为 falseConversion 属性为 null

以下信息介绍了实现方法、节点类型以及是否提升节点。

实现方法

以下规则确定操作的实现方法:

  • Type如果 或 rightleft 属性表示重载按位AND运算符的用户定义类型,MethodInfo则表示该方法的 是实现方法。

    注意

    不能在 C# 或 Visual Basic 中重载条件 AND 运算符。 但是,使用按AND位运算符计算条件AND运算符。 因此,按 AND 位运算符的用户定义重载可以是此节点类型的实现方法。

  • 否则,如果 为 ,则为 left。键入 和 right。类型是布尔类型,实现方法是 null

节点类型和提升与非提升

如果实现方法不是 null

  • 如果 left为 。键入 和 right。类型可分配给实现方法的相应参数类型,节点不会提升。 节点的类型是实现方法的返回类型。

  • 如果满足以下两个条件,则会提升节点,节点的类型是对应于实现方法的返回类型的可为空类型:

    • left.键入 和 right。类型都是值类型,其中至少有一种可为空,相应的不可为 null 类型等于实现方法的相应参数类型。

    • 实现方法的返回类型是不可为 null 的值类型。

如果实现方法是 null

  • left.键入 和 right。类型是相同的布尔类型。

  • 如果 left为 。键入 和 right。类型不可为空,节点不提升。 节点的类型是预定义条件 AND 运算符的结果类型。

  • 如果 left为 。键入 和 right。类型可为 null,节点已解除。 节点的类型是对应于预定义条件 AND 运算符的结果类型的可为 null 类型。

适用于