60

C# のジェネリック リストのジェネリック リストのアイデアに頭を悩ませているようです。<T>問題は、私がこれまで遊んだ経験のない引数の使用に起因すると思います。リストであるクラスを宣言し、その中に別のリストが含まれているが、そこに含まれているオブジェクトのタイプがすぐにわからない短い例を誰かが提供できますか?

Generics に関する MS のドキュメントを読んでいますが、 を宣言できるかどうか、またはパラメーターを内部リストにList<List<T>>正確に渡す方法がすぐにはわかりません。<T>

編集:情報の追加

ここでa を宣言するList<List<T>>ことは合法と見なされますか? ご参考までに、私は aulongをインデクサーとして使用できるようにするクラスを構築しており、(できれば) リストのリストを維持することで、.Net の厄介な 2GB 制限を回避しています。

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>>();
        } 
4

7 に答える 7

108

簡単な例:

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>

于 2012-09-27T18:55:41.443 に答える
29

または、この例をより見やすくするために:

public class CustomerListList : List<CustomerList> { }  

public class CustomerList : List<Customer> { }

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

そして、あなたはそれを続けることができます。無限にそしてそれを超えて!

于 2012-09-27T18:57:02.513 に答える
2

私もこのアイデアをいじっていますが、少し違う振る舞いをしようとしていました。私のアイデアは、それ自体を継承するリストを作成することでした。したがって、リスト内のリスト内のリスト内にリストを埋め込むことができるデータ構造を作成することでした...無限に!

実装

//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");
于 2012-09-27T22:47:03.693 に答える
2
public class ListOfLists<T> : List<List<T>>
{
}


var myList = new ListOfLists<string>();
于 2012-09-27T19:01:58.517 に答える
-4

リストでネストされたリストを使用しないでください。

List<List<T>> 

T が定義済みの型であったとしても、正当ではありません。

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

于 2015-02-25T16:33:07.993 に答える