2016-02-04 117 views
2

我正在尋找一個解決方案來創建具有不同數據類型的列表List<>List<List<int>,List<double>,List<string>> list;列表<>與多個列表C#

或多種類型的數據一個List<>List<int,double,string> list;

+1

創建列表 Seb

+5

你究竟在做什麼**試圖做什麼? – cubrr

+0

假設你可以做'List list;'list [0]'的編譯時類型是什麼?你需要一個通用的基礎類型=在這種情況下,'對象'。 –

回答

3

可能是你可以根據類型做這樣

public class Helper 
    { 
     public object value; 
     private string Type; 
    } 

然後創建列表這樣

myList.Add(new Helper {value = 45,Type = "int"}); 
myList.Add(new Helper {value = 45,Type = "int"}); 
myList.Add(new Helper {value = "hello",Type = "string"}); 

和隱蔽

List<Helper> myList=new List<Helper>(); 

使用。

4

,您可以撥打通過

List<List<int>> 

列出的名單要與多種數據類型的列表,你可以使用一個Tuple這可能需要多達8個項目秒。

List<Tuple<string, int>> 
List<Tuple<string, string, int>> 

你甚至可以去瘋狂做以下

Tuple<List<int>, int, int> tuple = new Tuple<List<int>, int, int>(new List<int>(), 2, 3); 
+0

謝謝@Swen –

0

如果我正確認識你,我想你需要一點輔助類:

public class MyInfo { 
    public int MyInt32 { get; set; } 
    public double MyDouble { get; set; } 
    public string MyString { get; set; } 
} 

然後,使那些列表:var myList = new List<MyInfo>()

你也可以使用一個List<Tuple<int, double, string>>,但我會建議創建自己的類,如果使用的範圍比單級更寬,因爲Tuples性能不是很描述爲它們是什麼:Item1Item2Item3 ...

5

千真萬確... 爲什麼?

消耗這些結構的代碼將會令人困惑並且難以支持。它真的,真的會。

如果您的數據具有自定義結構,請創建一個自定義對象來表示該結構。事情是這樣的:

class MyThing 
{ 
    public int Widget { get; set; } 
    public double Foo { get; set; } 
    public string Something { get; set; } 
} 

使用您的值/類型/等實際有意義的名字。當然,因爲這就是完成這一點的全部要點。

然後,只需有這些列表:

var things = new List<MyThing>(); 

當你的結構的不斷變化和成長,你建立一個結構的邏輯放到對象本身,而不是把所有的消費代碼它使用它。然後使用它的代碼更接近它所要執行的操作的語義,而不是令人眼花繚亂的語法操作。要解決這個

+0

謝謝@David –

1

最好的辦法是使用界面,你可以在這裏找到list of multiple data types

+1

雖然這是好的建議(最好是重複的建議/評論,而不是回答順便說一句),但它對OP沒有幫助,因爲'int'之間沒有共享接口,'double'和'string'。 –

1

解決方案可以使用ArrayList - 舊的非泛型列表。這允許你放入任何東西,int,string,FooObject,bool,....