MemberInfo для Func<T1, T2,...>
Я попытался реализовать решение этого вопроса, изложенное @Marc Gravell. У меня проблемы с получением MemberInfo
бросить на MethodInfo
, тем не мение. Я использую.NET 4.7, и делаю некоторую прикольную динамическую компиляцию, используя CodeDOM
, Я подозреваю RtFieldInfo
->
MethodInfo
преобразование происходит из-за того, что это статический класс / статический член, или что я делаю что-то тупое компиляцией.
Все помогает, спасибо!
static void Main(string[] args)
{
string code = @"
using System;
using System.IO;
namespace MyProgram.DynamicallyCompiled
{
public static class Functions
{
// just a proof-of-concept dummy function.
public static Func<object, Func<FileInfo, bool>> _func_Axnflzhh =
o => f => {
var i = o.GetHashCode();
return o.GetHashCode() > f.GetHashCode();
};
}
}
";
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();
CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
Type type = results.CompiledAssembly.GetType("MyProgram.DynamicallyCompiled.Functions");
MemberInfo mi = type.GetMember("_func_Axnflzhh")[0];
Func<object,Func<FileInfo, bool>> f = Delegate.CreateDelegate(
typeof(Func<object,Func<FileInfo, bool>>), (MethodInfo)mi);
// System.InvalidCastException: 'Unable to cast object of type 'System.Reflection.RtFieldInfo' to type 'System.Reflection.MethodInfo'.'
}