如何使用 Type 对象作为 Type 参数?
例如:
byte[] Data;
Type objectType;
public T MyFunction<T>()
{
return OtherClass.Deserialize <objectType> (Data);
}
换句话说,如何在 Type 参数中使用 Type 对象<typehere>
?
您的通用方法需要在编译时已知的类型标识符。同时,您正在尝试将此类类型的实例传递给您的方法,但直到runtime才知道此类实例。
改用反射:
var method = typeof (OtherClass).GetMethods()
.Single(x => "Deserialize".Equals(x.Name)
&& x.IsGenericMethodDefinition);
method = method.MakeGenericMethod(new[] { objectType });
method.Invoke(null, new object[] { Data });
您应该编写 MyFunction 方法,例如:
public T MyFunction<T>(byte[] data)
{
return OtherClass.Deserialize<T>(data);
}
客户端代码如下所示:
byte[] Data = new byte[];
Type objectType;
objectType = MyFunction<Type>(Data);
像这样(递归,为简洁起见):
Type myType;
public void MyFunction<T>(T instance) {
MyFunction<Type>(myType);
}
这myType
是一个Type
对象。所以你应该打电话MyFunction<Type>( myType);
泛型实际上是为使用在调用端编译时已知的类型而设计的。(当然,就调用者而言,类型参数本身可以是类型参数。)
否则,你会被泛型困住——你会得到MethodInfo
关联的 with OtherClass.Deserialize
,调用MakeGenericMethod
usingobjectType
作为参数,然后调用结果方法。
var method = typeof(OtherClass).GetMethod("Deserialize");
var genericMethod = method.MakeGenericMethod(objectType);
object result = genericMethod.Invoke(null, Data);
请注意,这不会返回T
。MyFunction
如果您实际上不打算使用类型参数,则不清楚为什么您的方法是通用的。