Sdílet prostřednictvím


Expression<TDelegate> Třída

Definice

Představuje výraz lambda silného typu jako datovou strukturu ve formě stromu výrazů. Tuto třídu nelze zdědit.

generic <typename TDelegate>
public ref class Expression sealed : System::Linq::Expressions::LambdaExpression
public sealed class Expression<TDelegate> : System.Linq.Expressions.LambdaExpression
type Expression<'Delegate> = class
    inherit LambdaExpression
Public NotInheritable Class Expression(Of TDelegate)
Inherits LambdaExpression

Parametry typu

TDelegate

Typ delegáta Expression<TDelegate> , který představuje.

Dědičnost
Expression<TDelegate>

Příklady

Následující příklad kódu ukazuje, jak reprezentovat výraz lambda jak jako spustitelný kód ve formě delegáta, tak jako data ve formě stromu výrazu. Ukazuje také, jak pomocí metody převést strom výrazů zpět na spustitelný kód Compile .


// Lambda expression as executable code.
Func<int, bool> deleg = i => i < 5;
// Invoke the delegate and display the output.
Console.WriteLine("deleg(4) = {0}", deleg(4));

// Lambda expression as data in the form of an expression tree.
System.Linq.Expressions.Expression<Func<int, bool>> expr = i => i < 5;
// Compile the expression tree into executable code.
Func<int, bool> deleg2 = expr.Compile();
// Invoke the method and print the output.
Console.WriteLine("deleg2(4) = {0}", deleg2(4));

/*  This code produces the following output:

    deleg(4) = True
    deleg2(4) = True
*/

' Lambda expression as executable code.
Dim deleg As Func(Of Integer, Boolean) = Function(ByVal i) i < 5
' Invoke the delegate and display the output.
MsgBox(String.Format("deleg(4) = {0}", deleg(4)))

' Lambda expression as data in the form of an expression tree.
Dim expr As System.Linq.Expressions.Expression(Of Func(Of Integer, Boolean)) = Function(ByVal i) i < 5
' Compile the expression tree into executable code.
Dim deleg2 As Func(Of Integer, Boolean) = expr.Compile()
' Invoke the method and print the output.
MsgBox(String.Format("deleg2(4) = {0}", deleg2(4)))

' This code produces the following output:
'
' deleg(4) = True
' deleg2(4) = True

Poznámky

Pokud je výraz lambda přiřazen k proměnné, poli nebo parametru, jehož typ je Expression<TDelegate>, kompilátor generuje instrukce pro sestavení stromu výrazů.

Note

Převod výrazu lambda na typ Expression<D> (Expression(Of D) v jazyce Visual Basic) existuje, pokud existuje převod výrazu lambda na delegáta typu D . Převod však může selhat, například pokud text výrazu lambda je blok. To znamená, že delegáti a stromy výrazů se chovají podobně s ohledem na řešení přetížení.

Strom výrazu je reprezentace výrazu lambda v paměti. Strom výrazu zprůhlední a explicitní strukturu výrazu lambda. S daty ve stromu výrazů můžete pracovat stejně jako s jakoukoli jinou datovou strukturou.

Schopnost zpracovávat výrazy jako datové struktury umožňuje rozhraním API přijímat uživatelský kód ve formátu, který lze kontrolovat, transformovat a zpracovávat vlastním způsobem. Například implementace přístupu k datům LINQ to SQL používá toto zařízení k překladu stromů výrazů do Transact-SQL příkazů, které lze vyhodnotit databází.

Mnoho standardních operátorů dotazu definovaných Queryable ve třídě má jeden nebo více parametrů typu Expression<TDelegate>.

Je NodeType to Expression<TDelegate>Lambda.

K vytvoření objektu Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) použijte metodu nebo Lambda<TDelegate>(Expression, ParameterExpression[]) metodu Expression<TDelegate> .

Vlastnosti

Name Description
Body

Získá tělo výrazu lambda.

(Zděděno od LambdaExpression)
CanReduce

Označuje, že uzel lze snížit na jednodušší uzel. Pokud se vrátí hodnota true, lze volat Reduce() k vytvoření snížené formy.

(Zděděno od Expression)
Name

Získá název výrazu lambda.

(Zděděno od LambdaExpression)
NodeType

Vrátí typ uzlu tohoto Expression.

(Zděděno od LambdaExpression)
Parameters

Získá parametry výrazu lambda.

(Zděděno od LambdaExpression)
ReturnType

Získá návratový typ výrazu lambda.

(Zděděno od LambdaExpression)
TailCall

Získá hodnotu, která označuje, zda výraz lambda bude zkompilován s optimalizací koncového volání.

(Zděděno od LambdaExpression)
Type

Získá statický typ výrazu, který představuje Expression .

(Zděděno od LambdaExpression)

Metody

Name Description
Accept(ExpressionVisitor)

Odešle konkrétní metodu návštěvy pro tento typ uzlu. MethodCallExpression Například volá .VisitMethodCall(MethodCallExpression)

(Zděděno od Expression)
Compile()

Zkompiluje výraz lambda popsaný stromem výrazu do spustitelného kódu a vytvoří delegáta, který představuje výraz lambda.

Compile(Boolean)

Zkompiluje výraz lambda popsaný stromem výrazu do interpretovaného nebo zkompilovaného kódu a vytvoří delegáta, který představuje výraz lambda.

Compile(DebugInfoGenerator)

Vytvoří delegáta, který představuje výraz lambda.

CompileToMethod(MethodBuilder, DebugInfoGenerator)

Zkompiluje lambda do definice metody a vlastní ladicí informace.

(Zděděno od LambdaExpression)
CompileToMethod(MethodBuilder)

Zkompiluje lambda do definice metody.

(Zděděno od LambdaExpression)
Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetType()

Získá Type aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
Reduce()

Zmenší tento uzel na jednodušší výraz. Pokud CanReduce vrátí hodnotu true, měl by vrátit platný výraz. Tato metoda může vrátit jiný uzel, který se musí snížit.

(Zděděno od Expression)
ReduceAndCheck()

Zmenší tento uzel na jednodušší výraz. Pokud CanReduce vrátí hodnotu true, měl by vrátit platný výraz. Tato metoda může vrátit jiný uzel, který se musí snížit.

(Zděděno od Expression)
ReduceExtensions()

Zmenšuje výraz na známý typ uzlu (který není uzel rozšíření), nebo pouze vrátí výraz, pokud je již známým typem.

(Zděděno od Expression)
ToString()

Vrátí textovou reprezentaci Expression.

(Zděděno od Expression)
Update(Expression, IEnumerable<ParameterExpression>)

Vytvoří nový výraz, který je podobný tomuto, ale použije zadané podřízené položky. Pokud jsou všechny podřízené položky stejné, vrátí tento výraz.

VisitChildren(ExpressionVisitor)

Zmenší uzel a potom zavolá delegáta návštěvníka na zkrácený výraz. Metoda vyvolá výjimku, pokud uzel není reducible.

(Zděděno od Expression)

Platí pro

Viz také