Мне не известен метод в библиотеке отражений, который делает это.
Я не думаю, что это будет слишком сложно. Правило для простых случаев заключается в том, что должно быть сохраняющее представление преобразование из типа возврата метода в возвращаемый тип делегата, и должно быть сохраняющее представление преобразование из каждого из типов параметров делегата в каждый из типов параметров метода. То есть отношение совместимости ковариантно в типе возвращаемого значения и контравариантно в типе параметра , как и следовало ожидать.
Есть более сложные случаи с участием каррированных делегатов, но я думаю, что вы, вероятно, не захотите входить в них, если вы не делаете это, чтобы написать компилятор для функционального языка. (Вы делаете это, чтобы написать компилятор для функционального языка?)