【发布时间】:2012-05-03 14:01:26
【问题描述】:
我有这个方法:
public List<T> SomeMethod<T>( params ) where T : new()
所以我想称之为SomeMethod,如果我知道类型就可以了:
SomeMethod<Class1>();
但如果我在运行时只有Class1,我就无法调用它?
那么如何用未知的T类型调用SomeMethod?我通过反射得到了 Type。
我有类型的类型,但SomeMethod<Type | GetType()> 不起作用。
7 月更新。5 月:
这是我想要实现的示例代码:
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 };
}
}
}
这是一个从更大的背景中取出的演示。
【问题讨论】:
-
SLaks 很好地回答了您的问题。我只是提醒您,您在这里误用了
anonymous这个词,这意味着不同的东西。在您的情况下, T 是通用的。 -
这是您的 API 调用还是第三方 API?如果它是你的,那么考虑改变它,因为泛型不能解决问题,而是在这种情况下创建它。
-
这个想法是 - 我想调用 SomeMethod - 通常我会像 SomeMethod
();但我只知道我要使用的类是“Class1”或其他类的字符串。
标签: c# generics reflection