2013-08-19 33 views
0
class a { 

} 

class b<T>:a { 
public T foo; 
} 


List<a> foo2 = new List<a>(); 

b<int> foo3 = new b<int>(); 

foo3.foo = 4; 

foo2.add(foo3); 

now foo2 [0] .foo將不起作用,因爲類a沒有該屬性。不過,我想這樣做,列表可以有一堆通用項目。是否可以製作返回特定數據類型的泛型列表?

目前我將所有類型轉換爲字符串或字節數組。有沒有辦法創建一個返回特定類型的通用項列表?

+0

你有什麼心裏到底是什麼? 「返回特定類型」有點不清楚。而且,即使'foo2 [0] .foo'在一般情況下工作,你仍然有一個問題:你怎麼知道'foo2 [0]'實際上有'foo'?它可能只是一個「a」實例。如果它永遠不可能是'a'實例,那麼列表爲什麼是'a'列表? – Jon

+1

例如,假設列表b 和b 上有兩個項目,則foo2 [0] .foo將返回一個int,並且foo2 [1] .foo將返回一個浮點數。 – SamFisher83

+0

這很不清楚。你能不能更清楚地問你在問什麼? –

回答

1

對於沒有類型轉換的解決方案,你應該看一看接受這個問題的答案:Discriminated union in C#

的Union3(或4或5或有多少不同類型的需要)類型提出朱麗葉將使你有一個只允許你想要的類型的列表:

var l = new List<Union3<string, DateTime, int>> { 
      new Union3<string, DateTime, int>(DateTime.Now), 
      new Union3<string, DateTime, int>(42), 
      new Union3<string, DateTime, int>("test"), 
      new Union3<string, DateTime, int>("one more test") 
    }; 

     foreach (Union3<string, DateTime, int> union in l) 
     { 
      string value = union.Match(
       str => str, 
       dt => dt.ToString("yyyy-MM-dd"), 
       i => i.ToString()); 

      Console.WriteLine("Matched union with value '{0}'", value); 
     } 

在這裏看到完整的例子:http://ideone.com/WZqhIb

相關問題