C#:在运行时获取要传递到Generic方法中的类型参数
本文关键字:Generic 方法 类型参数 运行时 获取 | 更新日期: 2023-09-27 18:27:33
通用方法是…
public void PrintGeneric2<T>(T test) where T : ITest
{
Console.WriteLine("Generic : " + test.myvar);
}
我从Main()调用此。。。
Type t = test2.GetType();
PrintGeneric2<t>(test2);
我得到错误"CS0246:找不到类型或命名空间名称't'"answers"CS1502:最佳重载方法匹配DoSomethingClass.PrintGeneric2<t>(t)具有无效参数"
这与我之前的问题有关:C#:传递一个通用对象
我读到过,如果不使用反射或methodinfo,就无法在运行时确定泛型类型,但我不太清楚在这种情况下如何确定。
如果你能启发我,谢谢你=)
如果您真的想使用编译时未知的类型参数调用泛型方法,您可以编写以下内容:
typeof(YourType)
.GetMethod("PrintGeneric2")
.MakeGenericMethod(t)
.Invoke(instance, new object[] { test2 } );
然而,正如其他回复所说,Generics可能不是您情况下的最佳解决方案。
泛型提供编译时参数多态性。您正试图将它们与仅在运行时中指定的类型一起使用。简短的回答是:它不会起作用,也没有理由(除了反思,但这完全是另一种野兽)。
只需调用:
PrintGeneric2(test2);
编译器将根据您传递的内容推断<t>
。