有没有办法存储通用类型参数以供进一步使用。 场景就是这样的。
Queue<ApiHandlerHelper> requestQueue = new Queue<ApiHandlerHelper> ();
public void HitApi<T> (ApiHandlerHelper helper)
{
if (_IfHandlerProcessing) {
requestQueue.Enqueue (helper);
} else {
StartCoroutine (checkInternetConnection<T> ());
_IfHandlerProcessing = true;
}
}
HitApi接收来自多个管理员的呼叫,我想检查Hitpi是否忙于处理一个管理器的请求,即将发出的请求将进入队列内。现在我需要存储Generic类型参数“T”以便在以后的阶段使用。像这样的东西
AoiHandlerObject.StoreGenerticType<T> ();
我需要存储T类型,以便在我们收到前一位经理的回复时自动调用HitApi。
答案 0 :(得分:1)
您无法存储泛型类型参数,但您可以为泛型参数执行此操作。虽然您无法在编译期间提供通用参数类型,但使用反射可以调用泛型方法(或实例化泛型类型):
Type genericArg1 = typeof(T);
现在应该使用反射来调用你的方法:
// obj.HitApi<T>(ApiHandlerHelper helper)
typeof(ClassContainingHitApiMethod)
.GetMethod("HitApi", BindingFlags.Public | BindingFlags.Instance)
.MakeGenericMethod(genericArg1)
.Invoke(instanceOfClassContainingHitApiMethod, new object[] { instanceOfApiHelper });
答案 1 :(得分:0)
使用typeof(T)
检索表示传递给T
参数的类型的Type
实例。然后,您可以存储此Type
实例以供进一步使用,就像任何其他对象引用一样。
答案 2 :(得分:0)
如果要存储null
类型的实例,存储$email = new PHPMailer();
$email->From = 'donotreply@example.com';
$email->FromName = 'donotreply@example.com';
$email->Subject = $subject;
$email->Body = $msg;
$email->AddAddress( $to );
$email->IsHTML(true);
if($_FILES['fUpload']['tmp_name'][0] !== ''
&& preg_match("/image/", $_FILES['fUpload']['type'][0])){
$file_to_attach = $_FILES['fUpload']['tmp_name'][0];
$email->AddAttachment( $file_to_attach , $_FILES['fUpload']['name'][0]);
}
$sent = $email->Send();
的类型,则可以使用Type
。
T
但是从变量 typeof(T)
获取var type = typeof(T);
StoreType(type);
可能很麻烦,因为它需要一些反思。我认为实际上可能更少工作来存储HitApi<T>
,具体取决于您的确切需求。