2013-07-05 48 views
0

我不知道是否有可能创建不同类型的二维List。换句话说,我不知道这样的事情是可能的:不同类型的二维列表

List<T, U> list = new List<T, U>(); 

其中TU任何两种不同类型。

是否有可能实现这一点,而不诉诸于struct s或class es?

+0

你想用这个完成什么? –

+0

你想要得到像Dictionary一样的东西吗?或者,请再解释一下自己? – Styxxy

+0

我想保留一个索引列表,并分别为'int'和'string'类型的值。 – Raptor

回答

4

这听起来像你对我正在寻找的是一个Dictionary<T,V>

var dictionary = new Dictionary<int, string>(); 
dictionary[3] = "three"; 
dictionary[7] = "seven"; 
foreach(var keyValuePair in dictionary) 
{ 
    Console.WriteLine("{0}: {1}", keyValuePair.Key, keyValuePair.Value); 
} 
// 3: three 
// 7: seven 
0

第一种方法:继承。但你可以去创建一个List<Object>。对象不关心你在那里扔什么。但是限制到两个类别,不,这是不可能的。

+2

这在很多层面上都是一个坏主意。他可以放置任何物品,但是如果不投射它,他将无法访问任何物品。对于任何两值的“对象”,您需要一个类或一个结构,所以不妨继续创建一个类(这是问题不要做的)。无论如何,如果你想要一个对象列表,不妨使用旧的'ArrayList',但建议不要这样做。 –

+0

我知道,但它确实有效。但看到其他答案,我可能会误解这个问题。 –

3

你可以做这样的事情,但我不知道这是否是你所需要的:

List<Tuple<int, string>> list = new List<Tuple<int, string>>(); 
list.Add(Tuple.Create<int, string>(2, "two")); 
+0

如果OP需要能够将整数映射到多个字符串,这是一个很好的解决方案。一个'Dictionary'每个键需要一个值。 –

+1

@ p.s.w.g我不同意这一点。你可以简单地使用一个'Dictionary >'(或者如果他希望在这个键中有唯一性的话,甚至可以使用'Hashset ')。关于元组列表的问题是一个关键的查找将在O(N)中。现在这可能不是问题,如果他只是迭代,但只要你想按键查找,就可以使用字典。 –

+0

@SimonBelanger当然可以。这也是我的愿望。我说这是一个很好的解决方案,并不是它很理想。 –

3

你可以使用一个Dictionary<T, U>

var list = new Dictionary<T, U>(); 

T的d U的类型是你想要的。