有什么方法可以通过反射来判断类型 A 的通用列表与类型 B 的通用列表相关吗?例如,我有一个 List<string>
和一个 List<int>
.我如何通过反射判断这两种类型都是 List<T>
的“实例”? .我想我遇到了问题,因为 List<T>
不是真正的类型。你不能做 typeof(List<T>)
例如。 List<T>
我猜是一个编译器技巧。那么有没有办法确定两种不同的类型是否来自 List<T>
?
最佳答案
当然可以... List<>
实际上是所谓的“未绑定(bind)泛型类型”,意思是它没有用类型参数化。当指定类型参数时,它被称为“绑定(bind)泛型类型”。涉及“原始”类型参数的类型,如 List<T>
是一种“开放通用类型”,并且只涉及实际类型,例如 List<int>
是一个“封闭的通用类型”。在 C# 中可以使用未绑定(bind)泛型类型的唯一情况是在 typeof 运算符中。要访问未绑定(bind)类型或封闭类型,您可以执行以下操作:
Type listOfT = typeof(List<>); // unbound type
Type listOfString = typeof(List<string>); // closed bound type
Type listOfInt32 = typeof(List<int>); // closed bound type
Assert.IsTrue(listOfString.IsGenericType);
Assert.AreEqual(typeof(string), listOfString.GetGenericTypeParameters()[0]);
Assert.AreEqual(typeof(List<>), listOfString.GetGenericTypeDefinition());
Type setOfString = typeof(HashSet<string>);
Assert.AreNotEqual(typeof(List<>), setOfString.GetGenericTypeDefinition());
关于c# - List<T> 实例之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2091646/