C# MethodInfo.MakeGenericMethod返回类型错误的MethodInfo

C# MethodInfo.MakeGenericMethod返回类型错误的MethodInfo,c#,generics,reflection,C#,Generics,Reflection,下定决心,我只是在装傻。我在第一次提交时漏掉了这个问题。 我一直在嵌套两种列表类型,因为该函数不包含列表,当我要求使用相同的returntype的泛型方法时,它会嵌套它们。我需要一种方法来获取列表中每个元素的类型 原始问题: 当我试图通过反射构建一个泛型方法时,我得到了错误的返回类型 这是最初的方法 (在域存储库中) 当执行通过mi.Invoke时,我得到 System.Collections.Generic.List<System.Collections.Generic.IList<

下定决心,我只是在装傻。我在第一次提交时漏掉了这个问题。

我一直在嵌套两种列表类型,因为该函数不包含列表,当我要求使用相同的returntype的泛型方法时,它会嵌套它们。我需要一种方法来获取列表中每个元素的类型

原始问题:

当我试图通过反射构建一个泛型方法时,我得到了错误的返回类型

这是最初的方法

(在域存储库中)

当执行通过mi.Invoke时,我得到

System.Collections.Generic.List<System.Collections.Generic.IList<Domain.Entity>>

你能展示一下你是如何测试这个类型的吗?i、 e
动态一般结果…
后面是什么行?另外:您可能会发现在调用者处使用非泛型编码更容易,即
IList results=(IList)mi.Invoke(…)我只是使用带断点的VisualStudio调试器。该类型的任何访问都会获得“预定义类型”Microsoft.CSharp.RuntimeBinder.Binder“未定义或导入”。整个想法是我希望访问列表中包含的方法和属性(自动对象比较)。我之所以使用dynamic,是因为没有明确的方法知道在编译时List将返回什么类型。我认为您的代码应该可以正常工作。你甚至没有在任何地方使用IList,所以我不知道你怎么能做到这一点。另外,在泛型方法中,.ToList是NHibernate的IList返回类型…Query()返回什么?我猜不是你想的那样。
MethodInfo mi = typeof(DomainRepository)
                .GetMethod("GetAll")
                .MakeGenericMethod(typeof(Domain.Entity));

dynamic genericResults = mi.Invoke(genericFactory, null);
System.Collections.Generic.List<System.Collections.Generic.IList<Domain.Entity>>
System.Collections.Generic.List<Domain.Entity>
[Test]
public void TestDataAccess()
{

    var genericAssembly = System.Reflection.Assembly.GetAssembly(typeof(Data.DomainRepository));
    var genericFactory = new Data.DomainRepository();

    var types = from x in System.Reflection.Assembly.GetAssembly(typeof(ActivityFactory)).GetTypes()
                where x.Name.Contains("Factory") 
                select x;

    foreach (Type t in types){
        Console.WriteLine(Environment.NewLine+ t.Name +" : "+ t.BaseType.Name);

        if (t.BaseType.Name != "Object"){
            Console.WriteLine(t.Name + " inherits " + t.BaseType.Name +". Skipping." + Environment.NewLine);
            continue;
        }

        var getSingle_methods = from m in t.GetMethods() 
            where m.GetParameters().Count() == 0
            && m.Name.Contains("get")
            select m;

        object objectInstace = System.Activator.CreateInstance( t );

        foreach (var method in getSingle_methods) {

            if (method.ReturnType.FullName.Contains("Domain")){
                    Console.WriteLine(method.Name + " returns "+method.ReturnType.Name);

                    dynamic resultOfMethod = t.InvokeMember(method.Name, 
                                                        BindingFlags.Public |
                                                        BindingFlags.Instance | 
                                                        BindingFlags.InvokeMethod, null, objectInstace, null);


                    MethodInfo mi = typeof(Data.DomainRepository)
                                    .GetMethod("GetAll")
                                    .MakeGenericMethod(method.ReturnType);


                    dynamic genericResults = mi.Invoke(genericFactory, null);

//unfinished as yet
                }
            }


        }

    }