我有一個方法傳遞泛型類型
public Queryable Query<T>()
{
}
現在我可以用動態創建通用參數T.
saomething這樣
public Queryable Query<T>()
{
Query<OtherT>();
}
otherT可能是一個類型的調用方法屬於T.
謝謝,
我有一個方法傳遞泛型類型
public Queryable Query<T>()
{
}
現在我可以用動態創建通用參數T.
saomething這樣
public Queryable Query<T>()
{
Query<OtherT>();
}
otherT可能是一個類型的調用方法屬於T.
謝謝,
嘗試以下操作:
public Queryable Query<T>()
{
MethodInfo method = GetType().GetMethod("Query");
return (Queryable)method.MakeGenericMethod(typeof(OtherT)).Invoke(this, null);
}
這將自動關閉的typeof(OtherT)
的Query<T>
方法。你可以在這裏提供你需要的類型。
感謝pieter,它的工作原理。 – Novice 2010-11-17 09:01:27
不客氣。 – 2010-11-17 09:02:48
你不行。通用參數類型需要在編譯時知道。這就是爲什麼我們說當我們使用泛型時它是一個強類型代碼,因爲這些類型是事先已知的。只有在運行時才知道類型,您不能將其用作通用參數。
您可以首先獲取泛型方法定義(使用Type.GetMethod
),然後調用MakeGenericMethod
並提供類型參數,然後調用Invoke
,從而動態使用反射來調用泛型方法。但是,您還沒有給我們足夠的信息繼續下去,以舉例說明。
謝謝jon,我試着使用MakeGeneric方法,並通過Invoke方法調用,它工作完美,非常感謝你 – Novice 2010-11-17 09:02:49
目前還不清楚你的問題是什麼或者你想做什麼,所以你不得不多加努力。 – TimothyP 2010-11-17 07:47:35