2010-12-03 93 views

回答

1

通用集合的主要優點是您可以指定想要存儲在集合中的確切類型,並且不需要裝箱。

您這裏有一些選擇:

  • 你堅持在System.Collections命名空間中的非泛型集合內搭對象作爲參數。
  • 您可以創建一個通用的類型對象集合。這與上述內容大致相同,但您可以使用IEnumerable<T>的所有擴展方法。
  • 您可以創建一個通用接口的通用集合,即所有要存儲,執行的類型。
6

如果你需要存儲多種類型的替代品,你需要聲明你的收藏是一種類型的所有其他類型是兼容的。

因此,例如,把既有MemoryStream,並在列表中FileStream,你可能有一個List<Stream>

List<Stream> streams = new List<Stream>(); 
streams.Add(new MemoryStream()); 
streams.Add(new FileStream(...)); 

更多不同類型,你可能需要去儘可能List<object>

List<object> objects = new List<object>(); 
objects.Add("hello"); // A String 
objects.Add(5); // An Int32 
objects.Add(new Button()); 
objects.Add(Guid.NewGuid()); 

請注意,在這種情況下,值類型值將被裝箱 - 但它們不會在特定值類型的列表中。

要使用任何類型特定的元素成員,您需要檢查它們是否是正確的類型並投射它們,例如,與is和鑄造,或as

string maybeString = objects[0] as string; 
if (maybeString != null) 
{ 
    Console.WriteLine("String of length {0}", maybeString.Length); 
} 
+0

我總是覺得通過`as`檢查類型通常是不被接受的嗎? – 2014-05-22 05:24:36

1

好,你需要做出的排行榜商店中最常見的分母;如果你想存儲任何東西,你需要一個List<object>()或者List<IMyCommonInterface>()。然而,根據我的經驗,如果你發現自己編碼這樣,你可能想重新考慮你的架構。

也許你可以解釋你試圖實現的解決方案?

相關問題