2010-11-17 111 views
2

我有一個方法傳遞泛型類型

public Queryable Query<T>() 
{ 
} 

現在我可以用動態創建通用參數T.

saomething這樣

public Queryable Query<T>() 
{ 

    Query<OtherT>(); 
} 

otherT可能是一個類型的調用方法屬於T.

謝謝,

+4

目前還不清楚你的問題是什麼或者你想做什麼,所以你不得不多加努力。 – TimothyP 2010-11-17 07:47:35

回答

2

嘗試以下操作:

public Queryable Query<T>() 
{ 
    MethodInfo method = GetType().GetMethod("Query"); 

    return (Queryable)method.MakeGenericMethod(typeof(OtherT)).Invoke(this, null); 
} 

這將自動關閉的typeof(OtherT)Query<T>方法。你可以在這裏提供你需要的類型。

+0

感謝pieter,它的工作原理。 – Novice 2010-11-17 09:01:27

+0

不客氣。 – 2010-11-17 09:02:48

2

你不行。通用參數類型需要在編譯時知道。這就是爲什麼我們說當我們使用泛型時它是一個強類型代碼,因爲這些類型是事先已知的。只有在運行時才知道類型,您不能將其用作通用參數。

4

您可以首先獲取泛型方法定義(使用Type.GetMethod),然後調用MakeGenericMethod並提供類型參數,然後調用Invoke,從而動態使用反射來調用泛型方法。但是,您還沒有給我們足夠的信息繼續下去,以舉例說明。

+0

謝謝jon,我試着使用MakeGeneric方法,並通過Invoke方法調用,它工作完美,非常感謝你 – Novice 2010-11-17 09:02:49