通过


Expression.OrElse 方法

定义

创建一个BinaryExpression表示仅在第一个运算符计算结果为false时计算第二个操作数的条件OR运算。

重载

名称 说明
OrElse(Expression, Expression)

创建一个BinaryExpression表示仅在第一个操作数计算结果为false时计算第二个操作数的条件OR运算。

OrElse(Expression, Expression, MethodInfo)

创建一个BinaryExpression表示仅在第一个操作数计算结果为false时计算第二个操作数的条件OR运算。

OrElse(Expression, Expression)

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

创建一个BinaryExpression表示仅在第一个操作数计算结果为false时计算第二个操作数的条件OR运算。

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

参数

left
Expression

要设置的属性Left等于的一个Expression

right
Expression

要设置的属性Right等于的一个Expression

返回

一个BinaryExpression属性NodeType等于OrElseLeftRight属性设置为指定值。

例外

leftrightnull.

未为left该位OR运算符定义 。键入和 right。类型。

-或-

left.键入和 right。类型与布尔类型不同。

示例

下面的代码示例演示如何创建一个表达式,该表达式表示仅在第一个操作数计算结果为false时计算第二个操作数的逻辑OR操作数。

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

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

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

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

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

' This expression perfroms a logical OR operation
' on its two arguments, but if the first argument is true,
' the second arument is not evaluated.
' Both arguments must be of the Boolean type.
Dim orElseExpr As Expression = Expression.OrElse(
     Expression.Constant(False),
     Expression.Constant(True)
 )

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

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

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

注解

生成的BinaryExpressionMethod属性设置为实现方法。 该 Type 属性设置为节点的类型。 如果节点被提升,则 IsLiftedIsLiftedToNull 属性均为 true。 否则,它们为 false。 属性 Conversionnull.

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

实现方法

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

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

    注释

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

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

节点类型和提升与非提升

如果实现方法不是 null

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

  • 如果满足以下两个条件,则节点被提升,并且节点的类型是与实现方法的返回类型相对应的可为 null 类型:

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

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

如果实现方法是 null

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

  • 如果 left。键入和 right。类型不可为 null,不会解除节点。 节点的类型是预定义条件 OR 运算符的结果类型。

  • 如果 left。键入和 right。类型可为 null,节点将提升。 节点的类型是与预定义条件 OR 运算符的结果类型相对应的可为 null 类型。

适用于

OrElse(Expression, Expression, MethodInfo)

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

创建一个BinaryExpression表示仅在第一个操作数计算结果为false时计算第二个操作数的条件OR运算。

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

参数

left
Expression

要设置的属性Left等于的一个Expression

right
Expression

要设置的属性Right等于的一个Expression

method
MethodInfo

一个 MethodInfo 设置为 Method 等于的属性。

返回

一个属性等于和 <a0 /> 的属性,以及设置为指定值的属性。

例外

leftrightnull.

method 不是 null ,它表示的方法返回 void,不是 staticShared 在 Visual Basic 中),也不采用两个参数。

且未为 定义按位运算符。键入和 。类型。

-或-

methodnullleft。键入和 right。类型与布尔类型不同。

注解

生成的BinaryExpressionMethod属性设置为实现方法。 该 Type 属性设置为节点的类型。 如果节点被提升,则 IsLiftedIsLiftedToNull 属性均为 true。 否则,它们为 false。 属性 Conversionnull.

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

实现方法

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

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

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

    注释

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

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

节点类型和提升与非提升

如果实现方法不是 null

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

  • 如果满足以下两个条件,则节点被提升,并且节点的类型是与实现方法的返回类型相对应的可为 null 类型:

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

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

如果实现方法是 null

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

  • 如果 left。键入和 right。类型不可为 null,不会解除节点。 节点的类型是预定义条件 OR 运算符的结果类型。

  • 如果 left。键入和 right。类型可为 null,节点将提升。 节点的类型是与预定义条件 OR 运算符的结果类型相对应的可为 null 类型。

适用于