Expression Class中 一部分方法的总结


(1)Add方法:


创建一个BinaryExpression的算法,额外不需要溢出检测.
public static BinaryExpression Add(
    Expression left,
    Expression right
)


(2)AddChecked方法:

创建一个BinaryExpression的算法,额外有溢出检测.
static BinaryExpression AddChecked(
Expression left,
Expression right
)


(3)Bind 方法

创建一个MemberAssignment呈现一个域或属性的初始化.
public static MemberAssignment Bind(
    MemberInfo member,
    Expression expression
)


(3)Call Method

调用一个MethodCallExpression.
public static MethodCallExpression Call(
    Expression instance,
    MethodInfo method
)


(4)Constant Method

创建一个有Value属性值的ConstantExpression.
public static ConstantExpression Constant(
    Object value
)

(5)Convert Method

创建一个UnaryExpression.
public static UnaryExpression Convert(
    Expression expression,
    Type type
)

(6)ElementInit方法

创建一个ElementInit.给第二个参数为IEnumerable(T)

public static ElementInit ElementInit(
    MethodInfo addMethod,
    IEnumerable<Expression> arguments
)


(7)GetActionType

创建一个Type对象表示一个泛性的System.Action委托的类型
public static Type GetActionType(
    params Type[] typeArgs
)


(8)GetFuncType方法


创建一个Type对象呈现一个泛性的System.Func委托的类型.

public static Type GetFuncType(
    params Type[] typeArgs
)


(9)GreaterThan

创建一个表示与被比较数字更大的BinaryExpression.


(10)Invoke Method

创建一个InvocationExpression.
public static InvocationExpression Invoke(
    Expression expression,
    IEnumerable<Expression> arguments
)

返回值
类型为System.Linq.Expressions.InvocationExpression;
一个已经有NodeType属性等于Invoke 和Expression和Arguments属性的值的InvocationExpression.

注意:

InvocationExpression最终结果的Type属性表示返回委托的类型是expression.Type;
如果arguments是Null,InvocationExpression最终结果Arguments属性是空.其他情况,它包括同一个元素的arguments以外的Expression objects被引用.

下面事例是使用Invoke(Expression,Expression[])方法创建一个InvocationExpression表示指定了arguments的lambda expression的invocation.

Expression MethodsSystem.Linq.Expressions.Expression<Func<intintbool>> largeSumTest =
Expression Methods    (num1, num2) 
=> (num1 + num2) > 1000;
Expression Methods
Expression Methods
// Create an InvocationExpression that represents applying
Expression Methods
// the arguments '539' and '281' to the lambda expression 'largeSumTest'.
Expression Methods
System.Linq.Expressions.InvocationExpression invocationExpression =
Expression Methods    System.Linq.Expressions.Expression.Invoke(
Expression Methods        largeSumTest,
Expression Methods        System.Linq.Expressions.Expression.Constant(
539),
Expression Methods        System.Linq.Expressions.Expression.Constant(
281));
Expression Methods
Expression MethodsConsole.WriteLine(invocationExpression.ToString());
Expression Methods
Expression Methods
// This code produces the following output:
Expression Methods
//
Expression Methods
// Invoke((num1, num2) => ((num1 + num2) > 1000),539,281)


 


(11)Expression.Lambda(TDelegate) Generic Method (Expression, IEnumerable(ParameterExpression))


创建一个Expression(TDelegate),在编译时委托类型就能被知道.

public static Expression<TDelegate> Lambda<TDelegate>(
    Expression body,
    IEnumerable<ParameterExpression> parameters
)

类型参数:

TDelegate:委托类型;


参数:

body:类型为System.Linq.Expressions.Expression.与Expression类中设置的Body属性相等.

parameters:类型为System.Collections.Generic.IEnumerable(ParameterExpression)

一个IEnumerable(T)包括使用Parameters集合中的ParameterExpression对象.

返回值:

类型为System.Linq.Expressions.Expression(TDelegate)

返回一个有的NodeType属性等于Lambda和Body和Parameters属性的值的Expression(TDelegate).

注意:

委托类型TDelegate的参数的个数等于元素参数的个数.

这里的参数的元素必须参考在body中的parameter expressions.

最终结果对象的类型属性表示类型为TDelegate.如果参数是null,最终结果对象参数属性是一个空(empty)集合.


(12)MakeUnary Method


创建一个UnaryExpression,给一个操作数,调用相应的factory method.
public static UnaryExpression MakeUnary(
    ExpressionType unaryType,
    Expression operand,
    Type type
)


(13)MemberInit Method

创建一个MemberInitExpression.

public static MemberInitExpression MemberInit(
    NewExpression newExpression,
    IEnumerable<MemberBinding> bindings
)

返回值:

类型为:System.Linq.Expressions.MemberInitExpression

一个已经有NodeType属性等于MemberInit 和NewExpression和Bindings属性的值的MemberInitExpression.

注意:

MemberInitExpression的最终结果的Type属性等于newExpression属性的类型.

事例:

下面事例怎样使用MemberInit(NewExpression, array<MemberBinding>[])方法去创建一个MemberInitExpression再去表示初始化一个新对象的两个成员.
Expression Methodsclass Animal
}



相关文章: