다음과 같은 코드가 런타임시 예외를 던지는 이유는 전통적인 방식으로 문제없이 컴파일하는 이유입니다. 내가 정확히 변환되어야하는 표현 결정할 수 없기 때문에이진 연산자 인 Multiply가 'System.Int32'및 'System.Double'형식에 대해 정의되지 않았습니다.
var left = Expression.Constant(25d);
var right = Expression.Constant(20);
// Throws an InvalidOperationException!
var multiplyExpression = Expression.Multiply(left, right);
var multiply = 25d * 20;
Debug.WriteLine(multiply.ToString()); // Works normally!
나는 Expression.Convert
를 사용하지 않습니다.
전통적으로 컴파일러는 변환 할면을 결정하기 위해 형식 우선 순위 규칙을 사용하는 'Expression.Convert'의 (도덕적으로 등가 인) 요소를 삽입합니다. –
이 경우 C# 컴파일러가 변환 한 표현식은 무엇입니까? –
변환 할 필요가있는 쪽을 알려주는 "곱하기"유형을 확인하십시오. – MerickOWA