변수, 상수 및 과제 : 연습은 식 트리를 행사

변수, 상수 및 과제 : 연습은 식 트리를 행사

변수를 정의

ParameterExpression 변수, 변수 매개 변수의 식을 만드는 데 사용됩니다.

C #에서, 변수는 다음과 같은 유형으로 구분된다 :

  • 유형 값 (값 유형)
  • 참조 형 (참조 형식)
  • 포인터 타입 (포인터 유형)

일반적으로, 만 포인터의 종류에 관해서는 여기되지 않습니다 값 형식과 참조 형식을 사용합니다.

C #의 기본 값 유형 : BOOL, 바이트 문자 이중 플로트, INT, 길이 등 (C 번호, 참조 형식에 속하는 배열).

표현의 나무는 두 가지 방법으로 변수를 만들 :

            ParameterExpression varA = Expression.Variable(typeof(int), "x");
            ParameterExpression varB = Expression.Parameter(typeof(int), "y");

차이 :

Expression.Variable()이 변수를 생성하는 수단;

Expression.Parameter()이 전달 된 파라미터를 생성하는 수단;

많은 감사 뒤에 사용 구분, 구체적인 예에 ​​관해서는 것입니다.

같은 점 : 유형이 생성됩니다 ParameterExpression.

예 :

            int a; 

            ParameterExpression varA = Expression.Variable(typeof(int), "x");
        static void Main(string[] args)
        {
            // 等同 Test()里的 int b
            ParameterExpression varB = Expression.Parameter(typeof(int), "y");
            Console.ReadKey();
        }
        public static void Test(int b)
        {
            Console.WriteLine(b);
        }

참조 타입은 또한 동일한 방법을 사용하여 변수를 생성한다.

방법 참조 예의 형태에 대해서는, 후술하는 데 사용될 것이다.

상수를 정의

사용하여 Expression.Constan()상수를 정의합니다.

예 :

            ConstantExpression constant = Expression.Constant(100);
            ConstantExpression constant1 = Expression.Constant(100, typeof(int));

우리는 브라우저의 코드를 빠르게 이해할 수 있도록 변경 사항을 쉽게 찾을 수, 오버로드 된 메서드의 두 매개 변수의 사용을 권장합니다.

할당

Expression.Assign() 변수 할당 식 트리.

다음과 같이 일반적으로 정의

BinaryExpression Assign(Expression left, Expression right);

왼쪽 표현을주고 오른쪽에 식의 값.

변수 할당 :

            ParameterExpression a = Expression.Variable(typeof(int), "x");

            ConstantExpression constant = Expression.Constant(100, typeof(int));

            BinaryExpression assign = Expression.Assign(a, constant);

오버로드 방법의 유형을 참고

Console 일반적인 방법은 오버로드

        public static void WriteLine(object value);

        public static void WriteLine(float value);

        public static void WriteLine(string value);

주의를 환기 식 트리, 오버로드 된 메서드를 사용하는 경우, 암시 적 변환은 정상 코드를 오도 할 수 없습니다.

            int a = 100;
            Console.WriteLine(a);

            ParameterExpression aa = Expression.Parameter(typeof(int), "a");
            BinaryExpression aaa = Expression.Assign(aa, Expression.Constant(100, typeof(int)));
            MethodCallExpression method = Expression.Call(null, typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }), aa);

            // 如果没有学到过执行表达式树,现在可以先忽略这里
            var call = Expression.Block(new ParameterExpression[] { aa }, aaa, method);
            Expression<Action> lambda = Expression.Lambda<Action>(call);
            lambda.Compile()();

프론트 출력 변수 A, 시스템은 내재 형 변환을 수행한다. 그러나 식 트리 방법의 사용은 올바른 방법 오버로드를 찾기 위해 작업의 종류에 대응하기 위해 호출됩니다. 위의 식 트리 콜은 Console.WriteLine()다음과 같은 오류를보고합니다 :

System.ArgumentException:“Expression of type 'System.Int32' cannot be used for parameter of type 'System.String' of method 'Void WriteLine(System.String)'
Arg_ParamName_Name”

추천

출처www.cnblogs.com/whuanle/p/11530555.html