我如何將操作員分配給代表?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;這一個(gè)包裝成一個(gè)額外的函數(shù)調(diào)用。Func<C, C, C> operation = (Func<C, C, C>)typeof(C).GetMethod("op_Addition").CreateDelegate(typeof(Func<C, C, C>));這個(gè)很可怕,不適用于基元。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>));這個(gè)更可怕,也不適用于基元。有優(yōu)雅的方法嗎?
1 回答

達(dá)令說
TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以使用.Compilelambda 表達(dá)式的方法執(zhí)行此操作:
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);
現(xiàn)在你lambda已經(jīng)a + b準(zhǔn)備好編譯了:
result = lambda.Compile();
Console.WriteLine(result(5, 2)); // print 7
- 1 回答
- 0 關(guān)注
- 113 瀏覽
添加回答
舉報(bào)
0/150
提交
取消