Dlaczego następujący kod zgłasza wyjątek w środowisku wykonawczym, a robi to w tradycyjny sposób kompiluje bez problemu?Operator binarny Multiply nie jest zdefiniowany dla typów "System.Int32" i "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!
nie użyje Expression.Convert
ponieważ nie mogę dokładnie określić, których ekspresja powinny zostać przekształcone.
Ponieważ w tradycyjny sposób, kompilator wstawia (moralny odpowiednik) 'Expression.Convert' - używając reguł pierwszeństwa typu, aby określić stronę do konwersji. –
Które wyrażenie kompilator C# został w tym przypadku przekonwertowany? –
Po prostu sprawdź typ "rozmnażaj", który powie Ci, która strona wymaga konwersji. – MerickOWA