一位同事用C语言向我指出了一个奇怪的案例(不太确定这是否真的很奇怪).
假设您有一个Employee类.如果要创建Employee类型的Generic List <>,您可以简单地执行以下操作:
Listx = new List ;
我知道我需要将Employee类型传递给Generic列表,以便它知道有关Employee的必需类型信息,并生成返回和接受与Employee兼容的参数的方法.
现在我的问题是,为什么不可能做到以下几点?
Employee x = new Employee(); Listlist = new List ();
这不足以满足List <>要知道的信息,以便创建列表吗?换句话说,作为Employee类型的x的类型现在作为泛型类型参数传递给List <>,它(我以前认为)与传递列表类型名称相同(在本例中为Employee) .
我知道在变量上使用Java(使用.class)关键字可以得到类似的东西.
我确定我错过了一些东西,所以拜托,欢迎我们!
不,这相当于没有在Java中可用.您不能使用"x.class"来获取变量的声明类型.
此外,typeof(x)
不工作在C#或者得到一个变量的类型-它返回Type
的引用类型的名称,例如:typeof(string)
将返回的引用Type
与关联的对象System.String
类型.这相当于String.class
在Java中使用.(再次注意,这适用.class
于类型名称,而不是变量名称.)
Java泛型也不支持最终语句之类的任何内容.如果您相信他们这样做,请举例:)
您可以在C#中执行的操作是使用类型推断来执行您想要的操作:
public static ListCreateListForSampleType (T sample) { return new List (); } ... Employee x = new Employee(); var list = CreateListForSampleType(x);
需要注意的是,我们没有理由为什么C#不能扩展到允许类似typeof(variablename)
或List
-这一切都编译时类型信息,毕竟.但是,我看不出它会满足团队对实用性的要求......还有其他更有用的功能我想先看看:)