Tại sao mã sau đây ném một ngoại lệ vào thời gian chạy, trong khi thực hiện nó theo cách truyền thống biên dịch mà không có vấn đề?Toán tử nhị phân Nhân không được định nghĩa cho các kiểu 'System.Int32' và '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!
Tôi sẽ không sử dụng Expression.Convert
vì tôi không thể xác định chính xác biểu thức nào cần được chuyển đổi.
Bởi vì theo cách truyền thống, trình biên dịch chèn (tương đương đạo đức) một 'Expression.Convert' - sử dụng các quy tắc ưu tiên kiểu để xác định phía nào cần chuyển đổi. –
Trình biên dịch C# nào đã chuyển đổi trong trường hợp này? –
Chỉ cần kiểm tra loại "nhân", điều đó sẽ cho bạn biết nhu cầu phụ nào được chuyển đổi. – MerickOWA