泛型 - 需要澄清

时间:2009-11-11 15:57:32

标签: c# generics

当我们声明(例子)List<T>时,我可以理解声明,但假设我宣布

IEnumerable<T<T1, T2>>

我实际宣布了什么?

  1. 是否意味着,IEnumerable<T>包含两种泛型类型? (使用它的方法是什么?)

  2. 我可以使用Person<T<T2<T3<P1,P2>>>>等深度嵌套级别吗?

  3. 简单的例子非常有帮助。

4 个答案:

答案 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)当然可以!