Expression.Convert 方法

定义

创建一个表示类型转换运算的 UnaryExpression

重载

Convert(Expression, Type)

创建一个表示类型转换运算的 UnaryExpression

Convert(Expression, Type, MethodInfo)

创建一个 UnaryExpression,它表示为其指定实现方法的转换运算。

Convert(Expression, Type)

Source:
UnaryExpression.cs
Source:
UnaryExpression.cs
Source:
UnaryExpression.cs

创建一个表示类型转换运算的 UnaryExpression

public:
 static System::Linq::Expressions::UnaryExpression ^ Convert(System::Linq::Expressions::Expression ^ expression, Type ^ type);
public static System.Linq.Expressions.UnaryExpression Convert (System.Linq.Expressions.Expression expression, Type type);
static member Convert : System.Linq.Expressions.Expression * Type -> System.Linq.Expressions.UnaryExpression
Public Shared Function Convert (expression As Expression, type As Type) As UnaryExpression

参数

expression
Expression

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

type
Type

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

返回

一个 UnaryExpression,其 NodeType 属性等于 Convert,并且其 OperandType 属性设置为指定值。

例外

expressiontypenull

未定义 expression.Type 和 type 之间的转换运算符。

示例

下面的代码示例演示如何创建表示类型转换操作的表达式。

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

// This expression represents a type conversion operation.
Expression convertExpr = Expression.Convert(
                            Expression.Constant(5.5),
                            typeof(Int16)
                        );

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

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

// This code example produces the following output:
//
// Convert(5.5)
// 5
' Add the following directive to your file:
' Imports System.Linq.Expressions 

' This expression represents a type conversion operation.        
Dim convertExpr As Expression = Expression.Convert(
                            Expression.Constant(5.5),
                            GetType(Int16)
                        )

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

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

' This code example produces the following output:
'
' Convert(5.5)
' 5

注解

Method生成的 UnaryExpression 的 属性设置为实现方法。 IsLiftedToNull 属性为 false。 如果提升节点, IsLifted 则 为 true。 否则为 false

实现方法

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

  • 如果任一 expression个 。类型 或 type 是定义隐式或显式转换运算符的用户定义类型, MethodInfo 表示该运算符的 是实现方法。

  • 否则:

    • 如果两者都为 expression。键入 并 type 表示数值或布尔类型,或者可以为 null 或不可为 null 的枚举类型,实现方法是 null

    • 如果任一 expression个 。类型 或 type 是引用类型,存在显式 expression装箱、取消装箱或引用转换。键入 , type实现方法是 null

提升与非提升

如果实现方法不是 null

  • 如果 expression为 。类型可分配给实现方法的参数类型,实现方法的返回类型可 type分配给 ,节点不会提升。

  • 如果为 的一个或两个 。 expression类型 或 type 是可以为 null 的值类型,相应的不可为 null 的值类型分别等于实现方法的参数类型和返回类型,节点被提升。

如果实现方法是 null

  • 如果两者都为 expression。键入 和 type 不可为 null,节点不会提升。

  • 否则,将提升节点。

适用于

Convert(Expression, Type, MethodInfo)

Source:
UnaryExpression.cs
Source:
UnaryExpression.cs
Source:
UnaryExpression.cs

创建一个 UnaryExpression,它表示为其指定实现方法的转换运算。

public:
 static System::Linq::Expressions::UnaryExpression ^ Convert(System::Linq::Expressions::Expression ^ expression, Type ^ type, System::Reflection::MethodInfo ^ method);
public static System.Linq.Expressions.UnaryExpression Convert (System.Linq.Expressions.Expression expression, Type type, System.Reflection.MethodInfo method);
public static System.Linq.Expressions.UnaryExpression Convert (System.Linq.Expressions.Expression expression, Type type, System.Reflection.MethodInfo? method);
static member Convert : System.Linq.Expressions.Expression * Type * System.Reflection.MethodInfo -> System.Linq.Expressions.UnaryExpression
Public Shared Function Convert (expression As Expression, type As Type, method As MethodInfo) As UnaryExpression

参数

expression
Expression

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

type
Type

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

method
MethodInfo

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

返回

一个 UnaryExpression,其 NodeType 属性等于 Convert,并且其 OperandTypeMethod 属性设置为指定值。

例外

expressiontypenull

method 不为 null 且其表示的方法返回 void;不为 static(在 Visual Basic 中不为 Shared);或者不是正好带一个参数。

未定义 expression.Type 和 type 之间的转换运算符。

- 或 -

expression.Type 不能赋给 method 所表示的方法的参数类型。

- 或 -

method 所表示的方法的返回类型不能赋给 type

- 或 -

expression.Type 或 type 为可以为 null 的值类型,并且相应的不可以为 null 的值类型不分别等于 method 所表示的方法的参数类型或返回类型。

找到多个与 method 说明相匹配的方法。

注解

Method生成的 UnaryExpression 的 属性设置为实现方法。 IsLiftedToNull 属性为 false。 如果提升节点, IsLifted 则 为 true。 否则为 false

实现方法

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

  • 如果 方法不 null为 ,则为实现方法。 它必须表示采用一个参数的 Visual Basic) 方法中的非 void staticShared (。

  • 否则,如果任一 expression。类型 或 type 是定义隐式或显式转换运算符的用户定义类型, MethodInfo 表示该运算符的 是实现方法。

  • 否则:

    • 如果两者都为 expression。键入 并 type 表示数值或布尔类型,或者可以为 null 或不可为 null 的枚举类型,实现方法是 null

    • 如果任一 expression个 。类型 或 type 是引用类型,存在显式 expression装箱、取消装箱或引用转换。键入 , type实现方法是 null

提升与非提升

如果实现方法不是 null

  • 如果 expression为 。类型可分配给实现方法的参数类型,实现方法的返回类型可 type分配给 ,节点不会提升。

  • 如果为 或两者之一,则为 。 expression类型 或 type 是可为 null 的值类型,相应的不可为 null 的值类型分别等于实现方法的参数类型和返回类型,节点被提升。

如果实现方法是 null

  • 如果两者都为 expression。键入 和 type 不可为 null,节点不会提升。

  • 否则,将提升节点。

适用于