Expression.Convert Метод

Определение

Создает выражение UnaryExpression, представляющее операцию преобразования типа.Creates a UnaryExpression that represents a type conversion operation.

Перегрузки

Convert(Expression, Type)

Создает выражение UnaryExpression, представляющее операцию преобразования типа.Creates a UnaryExpression that represents a type conversion operation.

Convert(Expression, Type, MethodInfo)

Создает UnaryExpression, представляющее операцию преобразования, для которой указан метод реализации.Creates a UnaryExpression that represents a conversion operation for which the implementing method is specified.

Convert(Expression, Type)

Создает выражение UnaryExpression, представляющее операцию преобразования типа.Creates a UnaryExpression that represents a type conversion operation.

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

Параметры

expression
Expression

Объект Expression, который следует задать в качестве значения свойства Operand.An Expression to set the Operand property equal to.

type
Type

Объект Type, который следует задать в качестве значения свойства Type.A Type to set the Type property equal to.

Возвраты

Выражение UnaryExpression со свойствомNodeType, равным Convert, и свойствами Operand и Type, для которых заданы указанные значения.A UnaryExpression that has the NodeType property equal to Convert and the Operand and Type properties set to the specified values.

Исключения

Значение параметра expression или typenull.expression or type is null.

Оператор преобразования не определен для типов expression.Type и type.Type.No conversion operator is defined between expression.Type and type.

Примеры

В следующем примере кода показано, как создать выражение, представляющее операцию преобразования типа.The following code example shows how to create an expression that represents a type conversion operation.

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

Комментарии

Свойству полученного результата UnaryExpression присваивается метод реализации. MethodThe Method property of the resulting UnaryExpression is set to the implementing method. Значение свойства IsLiftedToNullfalse.The IsLiftedToNull property is false. Если узел ликвидируется, IsLifted имеет значение. trueIf the node is lifted, IsLifted is true. В противном случае — false.Otherwise, it is false.

Метод реализацииImplementing Method

Следующие правила определяют метод реализации для операции.The following rules determine the implementing method for the operation:

  • Если это expressionтак. Тип или type является определяемым пользователем типом, определяющим оператор явного или неявного преобразования MethodInfo , который представляет этот оператор в качестве метода реализации.If either expression.Type or type is a user-defined type that defines an implicit or explicit conversion operator, the MethodInfo that represents that operator is the implementing method.

  • В противном случае:Otherwise:

    • Если они expressionоба. Type и type представляют числовые или логические типы, а также типы перечисления, допускающие значение null или не допускающие значения NULL, метод реализации имеет nullзначение.If both expression.Type and type represent numeric or Boolean types, or nullable or non-nullable enumeration types, the implementing method is null.

    • Если это expressionтак. Тип или type является ссылочным типом, и существует явное преобразование упаковки, распаковки или ссылки из expression. Тип, метод реализации — null. typeIf either expression.Type or type is a reference type and an explicit boxing, unboxing, or reference conversion exists from expression.Type to type, the implementing method is null.

С нулификацией и без приподнятияLifted versus Non-Lifted

Если метод реализации не nullимеет:If the implementing method is not null:

  • Если expression. Тип может быть назначен типу аргумента реализующего метода, а тип возвращаемого значения метода реализации — в type, узел не ликвидируется.If expression.Type is assignable to the argument type of the implementing method and the return type of the implementing method is assignable to type, the node is not lifted.

  • Если один или оба expression. Тип или type является типом значения, допускающим значение null, и соответствующие типы значений, не допускающие значения NULL, равны типу аргумента и возвращаемому типу метода реализации соответственно, узел ликвидируется.If one or both of expression.Type or type is a nullable value type and the corresponding non-nullable value types are equal to the argument type and the return type of the implementing method respectively, the node is lifted.

Если метод nullреализации:If the implementing method is null:

  • Если они expressionоба. Type и type не допускают значения NULL, узел не ликвидируется.If both expression.Type and type are non-nullable, the node is not lifted.

  • В противном случае узел ликвидируется.Otherwise the node is lifted.

Convert(Expression, Type, MethodInfo)

Создает UnaryExpression, представляющее операцию преобразования, для которой указан метод реализации.Creates a UnaryExpression that represents a conversion operation for which the implementing method is specified.

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

Параметры

expression
Expression

Объект Expression, который следует задать в качестве значения свойства Operand.An Expression to set the Operand property equal to.

type
Type

Объект Type, который следует задать в качестве значения свойства Type.A Type to set the Type property equal to.

method
MethodInfo

Объект MethodInfo, который следует задать в качестве значения свойства Method.A MethodInfo to set the Method property equal to.

Возвраты

Выражение UnaryExpression со свойством NodeType, равным Convert, и свойствами Operand, Type и Method, для которых заданы указанные значения.A UnaryExpression that has the NodeType property equal to Convert and the Operand, Type, and Method properties set to the specified values.

Исключения

Параметр expression или type имеет значение null.expression or type is null.

Значение параметра method не равно null, и метод, который представляется этим параметром, возвращает значение void, не является static (Shared в Visual Basic) и не принимает ровно один аргумент.method is not null and the method it represents returns void, is not static (Shared in Visual Basic), or does not take exactly one argument.

Оператор преобразования не определен для типов expression.Type и type.Type.No conversion operator is defined between expression.Type and type.

-или--or- Параметр expression.Type не назначается типу аргумента метода, представленному параметром method.expression.Type is not assignable to the argument type of the method represented by method.

-или--or- Тип возврата метода, представленный method, не назначается для type.The return type of the method represented by method is not assignable to type.

- или --or- Тип expression.Type или type поддерживает тип значения, а соответствующий тип, не поддерживающий значение null, не равен типу аргумента и типу возврата, соответственно метода, представленного method.expression.Type or type is a nullable value type and the corresponding non-nullable value type does not equal the argument type or the return type, respectively, of the method represented by method.

Найдено более одного метода, соответствующего описанию method.More than one method that matches the method description was found.

Комментарии

Свойству полученного результата UnaryExpression присваивается метод реализации. MethodThe Method property of the resulting UnaryExpression is set to the implementing method. Значение свойства IsLiftedToNullfalse.The IsLiftedToNull property is false. Если узел ликвидируется, IsLifted имеет значение. trueIf the node is lifted, IsLifted is true. В противном случае — false.Otherwise, it is false.

Метод реализацииImplementing Method

Следующие правила определяют метод реализации для операции.The following rules determine the implementing method for the operation:

  • Если метод не nullравен, то это метод реализации.If method is not null, it is the implementing method. Он должен представлять метод, не являющийся void static ,Shared (в Visual Basic), который принимает один аргумент.It must represent a non-void, static (Shared in Visual Basic) method that takes one argument.

  • В противном случае expression— значение. Тип или type является определяемым пользователем типом, определяющим оператор явного или неявного преобразования MethodInfo , который представляет этот оператор в качестве метода реализации.Otherwise, if either expression.Type or type is a user-defined type that defines an implicit or explicit conversion operator, the MethodInfo that represents that operator is the implementing method.

  • В противном случае:Otherwise:

    • Если они expressionоба. Type и type представляют числовые или логические типы, а также типы перечисления, допускающие значение null или не допускающие значения NULL, метод реализации имеет nullзначение.If both expression.Type and type represent numeric or Boolean types, or nullable or non-nullable enumeration types, the implementing method is null.

    • Если это expressionтак. Тип или type является ссылочным типом, и существует явное преобразование упаковки, распаковки или ссылки из expression. Тип, метод реализации — null. typeIf either expression.Type or type is a reference type and an explicit boxing, unboxing, or reference conversion exists from expression.Type to type, the implementing method is null.

С нулификацией и без приподнятияLifted versus Non-Lifted

Если метод реализации не nullимеет:If the implementing method is not null:

  • Если expression. Тип может быть назначен типу аргумента реализующего метода, а тип возвращаемого значения метода реализации — в type, узел не ликвидируется.If expression.Type is assignable to the argument type of the implementing method and the return type of the implementing method is assignable to type, the node is not lifted.

  • Если один из expressionних или оба. Type или type являются типом значения, допускающим значение null, и соответствующие типы значений, не допускающие значения NULL, равны типу аргумента и возвращаемому типу метода реализации соответственно, узел ликвидируется.If either or both of expression.Type or type are a nullable value type and the corresponding non-nullable value types are equal to the argument type and the return type of the implementing method respectively, the node is lifted.

Если метод nullреализации:If the implementing method is null:

  • Если они expressionоба. Type и type не допускают значения NULL, узел не ликвидируется.If both expression.Type and type are non-nullable, the node is not lifted.

  • В противном случае узел ликвидируется.Otherwise the node is lifted.

Применяется к