泛型類的實例,我需要這樣的創建一個通用類的實例:創建動態泛型類型參數
Type T = Type.GetType(className).GetMethod(functionName).ReturnType;
var comparer = new MyComparer<T>(); // ERROR: "The type or namespace name 'T' could not be found"
我發現這個answer哪裏,這是可能僅與反思。但使用反射我得到的對象,我需要投給我的泛型類型。我試過像這樣
Type myGeneric = typeof(MyComparer<>);
Type constructedClass = myGeneric.MakeGenericType();
object created = Activator.CreateInstance(constructedClass);
var comparer = (T)Convert.ChangeType(created, T);// ERROR: "The type or namespace name 'T' could not be found"
但是得到相同的錯誤。如何解決它?
下面是一個完整的例子:
public static bool Test(string className, string functionName, object[] parameters, object correctResult)
{
var method = Type.GetType(className).GetMethod(functionName);
Type T = method.ReturnType;
var myResult = method.Invoke(null, parameters);
dynamic myResultAsT = Convert.ChangeType(myResult, T);
dynamic correctResultAsT = Convert.ChangeType(correctResult, T);
var comparer = new MyComparer<T>(); // Problem is here!!!
return comparer.Equals(myResultAsT, correctResultAsT);
}
的想法是做一個單元測試,它將調用帶有參數的功能,並將其結果與正確結果進行比較。但我需要自定義比較器,所以我實現MyComparer
,由於編譯器錯誤,我無法使用它。
public class MyComparer<T> : IEqualityComparer<T>
{
public bool Equals(T x, T y){/* some implementation*/}
}
你的錯誤信息沒有意義,你確定這是他們說的嗎? – DavidG
@DavidG完整的編譯器錯誤是:'無法找到類型或名稱空間名稱'T'(缺少using指令還是程序集引用?)'。爲什麼它沒有意義? – Dejan
然後你沒有顯示足夠的代碼,請顯示[mcve] – DavidG