泛型类的实例,我需要这样的创建一个通用类的实例:创建动态泛型类型参数
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