8

我有这个方法:

public List<T> SomeMethod<T>( params ) where T : new()

所以我想调用SomeMethod它,如果我知道类型就可以了:

SomeMethod<Class1>();

但是,如果我只有Class1在运行时我无法调用它?

那么如何调用SomeMethod未知的T类型呢?我通过使用反射得到了类型。

我有类型的类型但SomeMethod<Type | GetType()>不起作用。

更新 7. 五月:

这是我想要实现的示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace ConsoleApplication63
{
    public class DummyClass
    {
    }

    public class Class1
    {
        public string Name;
    }

    class AssemblyTypesReflection
    {
        static void Main(string[] args)
        {
            object obj = new Class1() { Name = "John" } ;

            Assembly assembly = Assembly.GetExecutingAssembly();
            var AsmClass1 = (from i in assembly.GetTypes() where i.Name == "Class1" select i).FirstOrDefault();


            var list = SomeMethod<AsmClass1>((AsmClass1)obj); //Here it fails
        }

        static List<T> SomeMethod<T>(T obj) where T : new()
        {
            return new List<T> { obj };
        }
    }
}

这是一个从更大的背景中取出的演示。

4

2 回答 2

8

您需要使用反射来调用它:

var method = typeof(SomeClass).GetMethod("SomeMethod");
method.MakeGenericMethod(someType).Invoke(...);
于 2012-05-03T14:02:43.660 回答
4

您可以dynamic在 C# 4 中使用关键字。您还需要 .NET 4.0 或更高版本。:

SomeMethod((dynamic)obj);

The runtime infers the actual type argument and makes the call. It fails if obj is null since then there is no type information left. null in C# has no type.

于 2014-01-18T07:01:31.857 回答