Как я могу получить в C # конкретную операторскую функцию? - PullRequest
2 голосов
/ 19 марта 2010

Возможно ли получить функцию за оператором C #? Например, в F # вы можете сделать

let add = (+);;

val add : (int -> int -> int)

Возможно ли в c # сделать что-то вроде этого:

Func<int, int, int> add = (+);

или

Func<int, int, int> add = Int32.(+)

Ответы [ 3 ]

5 голосов
/ 19 марта 2010

Вы можете использовать лямбда-выражения:

Func<int, int, int> func = (val1, val2) => val1 + val2;
3 голосов
/ 19 марта 2010

Вот косвенный способ сделать то, что вы хотите:

Func<int, int, int> add = (int a, int b) => a + b;

Когда это отражено, можно увидеть, что F # также не обращается непосредственно к Int32.operator+ (что, вероятно, невозможно), но делает что-то вроде приведенного выше кода C #, просто используя вместо этого внутренний тип делегата (Microsoft.FSharp.Core.FastFunc).

0 голосов
/ 19 марта 2010

Чтобы добавить к другим ответам, добавление int s выполняется инструкцией CIL add, а не вызовом метода, поэтому нет никакого смысла, в котором можно было бы получить 'фактический MethodInfo.

...