在
Java中,Class使用泛型参数X很方便.但是C#的Type类没有这个.
那么在C#中,如何处理以下Java代码?
public <X> X methodThatReturns(Class<X> clazz) { ... }
在C#中似乎没有办法连接返回值和传递的Type.
澄清
几个答案表明方法参数不是必需的,因为该方法可以简单地定义为methodThatReturns< X>().
但是如果你确实有一些未知的Type变量,那么,基本上没有办法调用这样的泛型方法,以便它返回一个Type为t的对象?
在Java中,您可以自由地传递Class< X>变量没有丢失类型信息,但似乎在C#中传递等效的Type变量,可能会遇到限制,因为在需要调用泛型方法时不能使用它们.
解决方法
public X methodThatReturns<X>(Class<X> clazz) { ... }
还要记住,在C#中没有类型擦除,所以你可以做类似于(T)的事情而不用担心,如果Class是java“Class”对象而不是“some class”占位符:
public X methodThatReturns<X>(X value) { Type x = typeof(X); // that's fine if (value is SomeType) { } // that's fine too return (X)someObject; // I think you get the point }
编辑:
同样,由于通用类型信息在编译后不会丢失,因此您无需显式传入类型:
public X methodThatReturns<X>() { Type xType = typeof(X); // Type is to C#/.Net what Class<X> is to Java. }