변수, 상수 및 과제 : 연습은 식 트리를 행사
변수를 정의
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”