【发布时间】:2011-02-02 12:00:24
【问题描述】:
这个问题是我最初的问题here 的后续问题。
假设我有以下泛型类(简化!^_^):
class CasterClass<T> where T : class
{
public CasterClass() { /* none */ }
public T Cast(object obj)
{
return (obj as T);
}
}
具有将对象转换为指定类型的能力。
不幸的是,在编译时,我无法确切知道我必须使用哪些类型,所以我必须通过反射来实例化这个类,如下所示:
Type t = typeof(castedObject);
// creating the reflected Caster object
object CasterObj = Activator.CreateInstance(
typeof(CasterClass<>).MakeGenericType(t)
);
// creating a reflection of the CasterClass' Cast method
MethodInfo mi = typeof(CasterClass<>).GetMethod("Cast");
问题是,一旦我使用 mi.Invoke() 调用该方法,它将返回一个对象类型的输出,而不是特定类型的 T 实例(因为反射)。
有没有办法让通过反射调用的方法返回一个动态类型,如上图所示?我很确定 .NET 3.5 不具备转换为动态类型的功能(或者说,这是非常不切实际的)。
非常感谢!
【问题讨论】:
标签: c# generics reflection .net-3.5