use*_*895 17 c# generics types
通用方法是......
public void PrintGeneric2<T>(T test) where T : ITest
{
Console.WriteLine("Generic : " + test.myvar);
}
Run Code Online (Sandbox Code Playgroud)
我是从Main()调用它的...
Type t = test2.GetType();
PrintGeneric2<t>(test2);
Run Code Online (Sandbox Code Playgroud)
我得到错误"CS0246:类型或命名空间名称'T’无法找到"和"CS1502:最好重载的方法匹配DoSomethingClass.PrintGeneric2 <T>(T)具有无效参数"
这与我之前的问题有关:C#:传递通用对象
我已经读过,在没有使用反射或methodinfo的情况下,无法在运行时确定泛型类型,但是在这个实例中我不太清楚如何这样做.
谢谢,如果你能启发我=)
Mat*_*ias 29
如果你真的想使用编译时未知的类型参数来调用泛型方法,你可以编写如下内容:
typeof(YourType)
.GetMethod("PrintGeneric2")
.MakeGenericMethod(t)
.Invoke(instance, new object[] { test2 } );
Run Code Online (Sandbox Code Playgroud)
但是,正如其他回复所述,泛型可能不是您的最佳解决方案.
只需致电:
PrintGeneric2(test2);
Run Code Online (Sandbox Code Playgroud)
编译器会<t>
根据您传递的内容进行推断。