fork(3) download
  1. using System;
  2. using System.Linq;
  3. using System.Linq.Expressions;
  4.  
  5. public class Test
  6. {
  7. private static Expression<Func<T,TResult>> Unbox<T,TResult>(Expression<Func<T,object>> original) {
  8. return Expression.Lambda<Func<T,TResult>>(
  9. Expression.Convert(original.Body, typeof(TResult))
  10. , original.Parameters
  11. );
  12. }
  13.  
  14. public static void Main() {
  15. Expression<Func<int,object>> f1 = i => i*i;
  16. Expression<Func<int,int>> f2 = Unbox<int,int>(f1);
  17. Func<int,int> f = f2.Compile();
  18. Console.WriteLine("Result 2 times 2 is {0}", f(2));
  19. }
  20. }
Success #stdin #stdout 0.07s 34352KB
stdin
Standard input is empty
stdout
Result 2 times 2 is 4