當我們宣佈(例如)List<T>
我能理解的聲明,但假設我宣佈泛型 - 澄清所需
IEnumerable<T<T1, T2>>
什麼其實我表白?
是不是說,
IEnumerable<T>
包含兩個泛型? (使用它的方法是什麼?)我可以擁有像
Person<T<T2<T3<P1,P2>>>>
這樣的深層嵌套嗎?
簡單的例子會非常有幫助。
當我們宣佈(例如)List<T>
我能理解的聲明,但假設我宣佈泛型 - 澄清所需
IEnumerable<T<T1, T2>>
什麼其實我表白?
是不是說,IEnumerable<T>
包含兩個泛型? (使用它的方法是什麼?)
我可以擁有像Person<T<T2<T3<P1,P2>>>>
這樣的深層嵌套嗎?
簡單的例子會非常有幫助。
如果有一個類
public class Pair<T1, T2> { ... }
然後可以聲明的方法
IEnumerable<Pair<int, string>> GetPairs();
即返回雙可枚舉其中每對包含一個int和一個字符串的方法。
用法:
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>();
除非你真的得到了一個通用類型,稱爲T
,這將無法正常工作。你需要一個真實的類型,例如
IEnumerable<Dictionary<string, int>>
這是一個Dictionary<string, int>
參考序列。
但是,是的,你可以嵌套泛型很多 - 它變得相當不可讀:
List<Dictionary<List<IEnumerable<string>>, Dictionary<int, int>>> aargh = null;
是U喬恩斯基特?爲什麼你把標題改爲託尼小馬? – user160677 2009-11-11 16:06:43
@csharpbaby:是的,我是Jon Skeet。請參閱http://www.vimeo.com/7516539 – 2009-11-11 16:07:57
其實我正在深入閱讀C#,因爲您提到了IEnumerable
上面的例子不會編譯。但是你可以彼此中嵌入泛型類型的東西是這樣的:
IEnumerable<IEnumerable<int>>
這將是一個枚舉整數的枚舉(這將作爲一個鋸齒形二維數組)的。
(1)您聲明瞭IEnumerable
枚舉類型爲T<T1, T2>
的對象。例如,Hashtable<Int, String>
。
(2)當然可以!
非常好的朋友,真的幫了我很多。 :) 千恩萬謝。 – user160677 2009-11-11 16:58:59