Expression.OrElse Metod

Definition

Skapar en BinaryExpression som representerar en villkorsstyrd OR åtgärd som endast utvärderar den andra operanden om den första operatorn utvärderas till false.

Överlagringar

Name Description
OrElse(Expression, Expression)

Skapar en BinaryExpression som representerar en villkorsstyrd OR åtgärd som utvärderar den andra operanden endast om den första operanden utvärderas till false.

OrElse(Expression, Expression, MethodInfo)

Skapar en BinaryExpression som representerar en villkorsstyrd OR åtgärd som utvärderar den andra operanden endast om den första operanden utvärderas till false.

OrElse(Expression, Expression)

Skapar en BinaryExpression som representerar en villkorsstyrd OR åtgärd som utvärderar den andra operanden endast om den första operanden utvärderas till false.

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

Parametrar

left
Expression

En Expression som egenskapen Left ska vara lika med.

right
Expression

En Expression som egenskapen Right ska vara lika med.

Returer

En BinaryExpression som har egenskapen NodeType lika med OrElse och Left egenskaperna och Right inställda på de angivna värdena.

Undantag

left eller right är null.

Bitvisoperatorn OR har inte definierats för left. Skriv och right. Typ.

-eller-

left. Skriv och right. Typen är inte samma booleska typ.

Exempel

I följande kodexempel visas hur du skapar ett uttryck som representerar en logisk OR åtgärd som endast utvärderar den andra operanden om den första operanden utvärderas till false.

// 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

Kommentarer

Den resulterande BinaryExpression egenskapen har Method angetts till implementeringsmetoden. Egenskapen Type är inställd på nodens typ. Om noden lyfts är både IsLifted och IsLiftedToNull egenskaperna true. Annars är de false. Egenskapen Conversion är null.

Följande information beskriver implementeringsmetoden, nodtypen och om en nod lyfts.

Implementeringsmetod

Följande regler avgör implementeringsmetoden för åtgärden:

  • Type Om egenskapen för antingen left eller right representerar en användardefinierad typ som överbelastar bitvis-operatorn OR är den som representerar den MethodInfo metoden implementeringsmetoden.

    Note

    Operatorn conditional OR kan inte överbelastas i C# eller Visual Basic. Den villkorsstyrda OR operatorn utvärderas dock med hjälp av bitvis-operatorn OR . Därför kan en användardefinierad överbelastning av bitvisoperatorn OR vara implementeringsmetoden för den här nodtypen.

  • Annars, om left. Skriv och right. Typen är booleska typer, implementeringsmetoden är null.

Nodtyp och lyft jämfört med icke-lyft

Om implementeringsmetoden inte nullär :

  • Om left.Typ och right.Typ kan tilldelas till motsvarande argumenttyper i implementeringsmetoden, lyfts noden inte. Nodens typ är returtypen för implementeringsmetoden.

  • Om följande två villkor uppfylls lyfts noden och nodens typ är den null-typ som motsvarar implementeringsmetodens returtyp:

    • left. Skriv och right. Typ är båda värdetyper som minst en är nullbar och motsvarande icke-nullbara typer är lika med motsvarande argumenttyper för implementeringsmetoden.

    • Returtypen för implementeringsmetoden är en värdetyp som inte kan ogiltigförklaras.

Om implementeringsmetoden är null:

  • left. Skriv och right. Typen är samma booleska typ.

  • Om left. Skriv och right. Typen kan inte vara null, noden lyfts inte. Nodens typ är resultattypen för den fördefinierade villkorsoperatorn OR .

  • Om left. Skriv och right. Typen är null, noden lyfts. Nodens typ är den nullbara typen som motsvarar resultattypen för den fördefinierade villkorsoperatorn OR .

Gäller för

OrElse(Expression, Expression, MethodInfo)

Skapar en BinaryExpression som representerar en villkorsstyrd OR åtgärd som utvärderar den andra operanden endast om den första operanden utvärderas till false.

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

Parametrar

left
Expression

En Expression som egenskapen Left ska vara lika med.

right
Expression

En Expression som egenskapen Right ska vara lika med.

method
MethodInfo

A MethodInfo för att ange egenskapen Method lika med.

Returer

En BinaryExpression som har NodeType egenskapen lika med OrElse och Leftegenskaperna , Rightoch Method som är inställda på de angivna värdena.

Undantag

left eller right är null.

method är inte null och metoden den representerar returnerar void, är inte static (Shared i Visual Basic) eller tar inte exakt två argument.

method är null och bitvisoperatorn OR har inte definierats för left. Skriv och right. Typ.

-eller-

method är null och left. Skriv och right. Typen är inte samma booleska typ.

Kommentarer

Den resulterande BinaryExpression egenskapen har Method angetts till implementeringsmetoden. Egenskapen Type är inställd på nodens typ. Om noden lyfts är både IsLifted och IsLiftedToNull egenskaperna true. Annars är de false. Egenskapen Conversion är null.

Följande information beskriver implementeringsmetoden, nodtypen och om en nod lyfts.

Implementeringsmetod

Följande regler avgör implementeringsmetoden för åtgärden:

  • Om method inte är null och den representerar en icke-void, static (Shared i Visual Basic) som tar två argument, är det implementeringsmetoden för noden.

  • Annars, om Type egenskapen för antingen left eller right representerar en användardefinierad typ som överbelastar bitvis-operatorn OR , MethodInfo är den som representerar den metoden implementeringsmetoden.

    Note

    Operatorn conditional OR kan inte överbelastas i C# eller Visual Basic. Den villkorsstyrda OR operatorn utvärderas dock med hjälp av bitvis-operatorn OR . Därför kan en användardefinierad överbelastning av bitvisoperatorn OR vara implementeringsmetoden för den här nodtypen.

  • Annars, om left. Skriv och right. Typen är booleska typer, implementeringsmetoden är null.

Nodtyp och lyft jämfört med icke-lyft

Om implementeringsmetoden inte nullär :

  • Om left.Typ och right.Typ kan tilldelas till motsvarande argumenttyper i implementeringsmetoden, lyfts noden inte. Nodens typ är returtypen för implementeringsmetoden.

  • Om följande två villkor uppfylls lyfts noden och nodens typ är den null-typ som motsvarar implementeringsmetodens returtyp:

    • left. Skriv och right. Typ är båda värdetyper som minst en är nullbar och motsvarande icke-nullbara typer är lika med motsvarande argumenttyper för implementeringsmetoden.

    • Returtypen för implementeringsmetoden är en värdetyp som inte kan ogiltigförklaras.

Om implementeringsmetoden är null:

  • left. Skriv och right. Typen är samma booleska typ.

  • Om left. Skriv och right. Typen kan inte vara null, noden lyfts inte. Nodens typ är resultattypen för den fördefinierade villkorsoperatorn OR .

  • Om left. Skriv och right. Typen är null, noden lyfts. Nodens typ är den nullbara typen som motsvarar resultattypen för den fördefinierade villkorsoperatorn OR .

Gäller för