在C#中创建列表列表

时间:2012-09-27 18:52:56

标签: c# .net

我似乎在围绕C#中的通用列表通用列表的想法时遇到了一些麻烦。我认为问题源于<T>参数的使用,我之前没有经验。有人可以提供一个简短的例子,声明一个List是一个List,其中包含另一个List,但其中包含的对象的类型不是立即知道的吗?

我一直在阅读关于泛型的MS文档,我不能立即确定是否可以声明List<List<T>>,也不确定如何将<T>参数传递给内部列表。< / p>

编辑:添加信息

宣布List<List<T>>在此处被视为合法吗?如果您想知道,我正在构建一个允许我使用ulong作为索引器的类,并且(希望)通过维护列表列表来绕过令人讨厌的2GB限制.Net。

public class DynamicList64<T>
    {
        private List<List<T>> data = new List<List<T>>();

        private ulong capacity = 0;
        private const int maxnumberOfItemsPerList = Int32.MaxValue;



        public DynamicList64()
        {
            data = new List<List<T>>();
        } 

5 个答案:

答案 0 :(得分:73)

一个简单的例子:

List<List<string>> myList = new List<List<string>>();
myList.Add(new List<string> { "a", "b" });
myList.Add(new List<string> { "c", "d", "e" });
myList.Add(new List<string> { "qwerty", "asdf", "zxcv" });
myList.Add(new List<string> { "a", "b" });

// To iterate over it.
foreach (List<string> subList in myList)
{
    foreach (string item in subList)
    {
        Console.WriteLine(item);
    }
}

那是你在寻找什么?或者您是否正在尝试创建一个扩展class的新List<T>,其成员是“列表”?

答案 1 :(得分:21)

或这个例子,只是为了让它更加明显:

public class CustomerListList : List<CustomerList> { }  

public class CustomerList : List<Customer> { }

public class Customer
{
   public int ID { get; set; }
   public string SomethingWithText { get; set; }
}

你可以坚持下去。到无限和超越!

答案 2 :(得分:2)

public class ListOfLists<T> : List<List<T>>
{
}


var myList = new ListOfLists<string>();

答案 3 :(得分:1)

我也一直在考虑这个想法,但我试图实现一个稍微不同的行为。我的想法是创建一个继承自己的列表,从而创建一个数据结构,本质上允许您在列表中的列表中嵌入列表......无限!

<强>实施

//InfiniteList<T> is a list of itself...
public class InfiniteList<T> : List<InfiniteList<T>>
{
    //This is necessary to allow your lists to store values (of type T).
    public T Value { set; get; }
}

T是泛型类型参数。它是为了确保您班上的类型安全。当您创建InfiniteList的实例时,将T替换为您希望填充列表的类型,或者在此实例中替换Value属性的类型。

示例

//The InfiniteList.Value property will be of type string
InfiniteList<string> list = new InfiniteList<string>();

这是一个“工作”的例子,其中T本身是一个类型字符串的列表!

//Create an instance of InfiniteList where T is List<string>
InfiniteList<List<string>> list = new InfiniteList<List<string>>();

//Add a new instance of InfiniteList<List<string>> to "list" instance.
list.Add(new InfiniteList<List<string>>());

//access the first element of "list". Access the Value property, and add a new string to it.
list[0].Value.Add("Hello World");

答案 4 :(得分:0)

您不应在列表中使用嵌套列表。

List<List<T>> 
即使T是定义的类型,

也不合法。

https://msdn.microsoft.com/en-us/library/ms182144.aspx