我如何將操作員分配給代表?int a = 5;int b = 2;Func<int, int, int> operation = /* int.operator+ or int.operator- */;int result = operation(a, b);我知道三種方法:Func<int, int, int> operation = (a, b) => a + b;這一個包裝成一個額外的函數調用。Func<C, C, C> operation = (Func<C, C, C>)typeof(C).GetMethod("op_Addition").CreateDelegate(typeof(Func<C, C, C>));這個很可怕,不適用于基元。Expression<Func<C, C, C>> expression = (c, c2) => c + c2;BinaryExpression binaryExpression = (BinaryExpression)expression.Body;MethodInfo binaryExpressionMethod = binaryExpression.Method;Func<C, C, C> operation = (Func<C, C, C>)binaryExpressionMethod.CreateDelegate(typeof(Func<C, C, C>));這個更可怕,也不適用于基元。有優雅的方法嗎?
1 回答

達令說
TA貢獻1821條經驗 獲得超6個贊
您可以使用.Compilelambda 表達式的方法執行此操作:
Func<int, int, int> result;
var a = Expression.Parameter(typeof(int), "a");
var b = Expression.Parameter(typeof(int), "b");
var body = Expression.Add(a, b);
var lambda = Expression.Lambda<Func<int, int, int>>(body, a, b);
現在你lambda已經a + b準備好編譯了:
result = lambda.Compile();
Console.WriteLine(result(5, 2)); // print 7
- 1 回答
- 0 關注
- 106 瀏覽
添加回答
舉報
0/150
提交
取消