2013-07-02 26 views
2

我有一個對象採用類型參數 - 將其稱爲Object<T> - 並且需要能夠將具有不同類型參數的多個對象添加到列表中,如下所示:如何製作具有通用類型參數的對象列表

var obj1 = new Object<SomeType>(); 
var obj2 = new Object<SomeOtherType>(); 

var list = new List<Object<WhatGoesHere>{ obj1, obj2 }; 

我知道我可以用一個接口,如果它只是一個不同對象的名單,但似乎並沒有讓我有興趣知道我的選擇是這裏適用於不同類型的參數對象的列表?

+1

如果在類Object中有類型參數,則應該傳遞一個類型。對我來說,你需要做一些界面,因爲你不能通過那裏T – wudzik

回答

4

通常最好創建一個接口。我的大部分泛型類都有接口,在不知道泛型參數的情況下使用它們。

interface IFoo 
{ 
    object UntypedBlah(object arg); 
} 

class Foo<T> : IFoo 
{ 
    object UntypedBlah(object arg) 
    { 
    return Blah((T)arg); 
    } 

    T Blah(T arg) 
    { 
    //... 
    } 

} 

List<IFoo> foos = new List<IFoo>(); 
foos.Add(new Foo<int>()); 
foos.Add(new Foo<string>()); 
  • 你也可以讓它協變。 (這個接口會有一個協變的泛型參數,如果這個參數有意義,它取決於你在接口上需要的成員。)
  • 而不是「untyped」成員,你可以給它們相同的名字並明確地實現它們。但是有時當你有複雜的接口和類層次結構時,你會遇到麻煩,並且給它們一個不同的名字可能會更容易。
+0

工作。我做了一些noob錯誤,並在T:class之後添加了接口,而不是緊接在類名之後,所以它不是繼承。感謝讓我更清楚地瞭解我要去的是什麼! – GP24

相關問題