Expression.Convert 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
建立代表類型轉換作業的 UnaryExpression。
多載
Convert(Expression, Type) |
建立代表類型轉換作業的 UnaryExpression。 |
Convert(Expression, Type, MethodInfo) |
建立代表轉換作業的 UnaryExpression,此轉換作業已指定實作方法。 |
Convert(Expression, Type)
建立代表類型轉換作業的 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。
傳回
UnaryExpression,其 NodeType 屬性等於 Convert,且 Operand 和 Type 屬性設定為指定的值。
例外狀況
expression
或 type
為 null
。
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
備註
產生的 MethodUnaryExpression 屬性會設定為實作方法。 IsLiftedToNull 屬性為 false
。 如果節點隨即提升, IsLifted 則為 true
。 否則,會是 false
。
實作方法
下列規則會決定作業的實作方法:
如果任一
expression
個 。類型或type
是定義隱含或明確轉換運算子的使用者定義型別, MethodInfo 表示該運算符是實作方法。否則:
如果兩者皆為
expression
。型別和type
代表數值或布爾型別,或可為 Null 或不可為 Null 的列舉型別,實作方法為null
。如果任一
expression
個 。類型或type
是參考型別,而且有來自expression
的明確 Boxing、unboxing 或參考轉換。類型為type
,實作方法為null
。
隨即轉移與非增益
如果實作方法不是 null
:
如果為
expression
。類型可指派給實作方法的自變數型別,而實作方法的傳回型別可指派給type
,節點不會隨即解除。如果其中一個或兩者皆為
expression
。類型或type
為可為 Null 的實值型別,而對應的不可為 Null 實作實值型別與實作方法的傳回型別相等,節點就會隨即提升。
如果實作方法為 null
:
如果兩者皆為
expression
。型別和type
不可為 Null,節點不會隨即解除。否則,節點會隨即提升。
適用於
Convert(Expression, Type, MethodInfo)
建立代表轉換作業的 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。
- method
- MethodInfo
要將 MethodInfo 屬性設定為與之相等的 Method。
傳回
UnaryExpression,其 NodeType 屬性等於 Convert,且 Operand、Type 和 Method 屬性設定為指定的值。
例外狀況
expression
或 type
為 null
。
method
不是 null
,而且其代表的方法傳回的是 void
,不是 static
(在 Visual Basic 中為 Shared
),或者使用的引數不是剛好一個。
expression
.Type 和 type
之間未定義轉換運算子。
-或-
expression
.Type 無法指派給 method
所代表方法的引數類型。
-或-
method
所代表方法的傳回類型無法指派給 type
。
-或-
expression
.Type 或 type
是不可為 Null 的實值類型,且對應之不可為 Null 的實值類型不等於 method
所表示之方法的引數類型或傳回類型。
已找到一個以上的方法符合 method
說明。
備註
產生的 MethodUnaryExpression 屬性會設定為實作方法。 IsLiftedToNull 屬性為 false
。 如果節點隨即提升, IsLifted 則為 true
。 否則,會是 false
。
實作方法
下列規則會決定作業的實作方法:
如果方法不是
null
,則為實作方法。 它必須代表採用一個自變數的 Visual Basic) 方法中的非 void (static
Shared
。否則,如果其中一個
expression
為 。類型或type
是定義隱含或明確轉換運算子的使用者定義型別, MethodInfo 表示該運算符是實作方法。否則:
如果兩者皆為
expression
。型別和type
代表數值或布爾型別,或可為 Null 或不可為 Null 的列舉型別,實作方法為null
。如果任一
expression
個 。類型或type
是參考型別,而且有來自expression
的明確 Boxing、unboxing 或參考轉換。類型為type
,實作方法為null
。
隨即轉移與非增益
如果實作方法不是 null
:
如果為
expression
。類型可指派給實作方法的自變數型別,而實作方法的傳回型別可指派給type
,節點不會隨即解除。如果為或兩者
expression
。類型或type
為可為 Null 的實值型別,而對應的不可為 Null 實作實值型別會分別等於自變數型別和實作方法的傳回型別,則會隨即提升節點。
如果實作方法為 null
:
如果兩者皆為
expression
。型別和type
不可為 Null,節點不會隨即解除。否則,節點會隨即提升。