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'.'

    }

0 ответов

Другие вопросы по тегам