当我们声明(例子)List<T>
时,我可以理解声明,但假设我宣布
IEnumerable<T<T1, T2>>
我实际宣布了什么?
是否意味着,IEnumerable<T>
包含两种泛型类型? (使用它的方法是什么?)
我可以使用Person<T<T2<T3<P1,P2>>>>
等深度嵌套级别吗?
简单的例子非常有帮助。
答案 0 :(得分:4)
除非您实际上获得一个名为T
的泛型类型,否则将无效。你需要一个真实的类型,例如
IEnumerable<Dictionary<string, int>>
这是一系列Dictionary<string, int>
引用。
但是,是的,你可以很多地嵌套泛型 - 它变得非常难以理解:
List<Dictionary<List<IEnumerable<string>>, Dictionary<int, int>>> aargh = null;
答案 1 :(得分:4)
如果你有一个班级
public class Pair<T1, T2> { ... }
然后你可以声明一个方法
IEnumerable<Pair<int, string>> GetPairs();
即。一个返回可枚举对的方法,其中每对由int和string组成。
用法:
foreach (Pair<int, string> pair in GetPairs()) { ... }
你也可以深深地嵌套这些:
IEnumerable<Pair<int, Pair<string, string>>> GetPairs();
即。一个返回可枚举对的方法,其中每对由一个int和一对两个字符串组成。
这也适用于泛型:
IEnumerable<Pair<T1, T2>> GetPairs<T1, T2>();
即。返回可枚举对的方法,其中每对由T1和T2组成。
但你不能这样做:
IEnumerable<T<T1, T2>> GetGenericPairs<T, T1, T2>();
答案 2 :(得分:1)
以上示例无法编译。但是你可以用这样的东西将Generic类型嵌入到彼此中:
IEnumerable<IEnumerable<int>>
这可能是一个可枚举的整数(它将作为锯齿状的二维数组)。
答案 3 :(得分:1)
(1)您声明了IEnumerable
枚举T<T1, T2>
类型的对象。例如,Hashtable<Int, String>
。
(2)当然可以!