我似乎在围绕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>>();
}
答案 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)