2012-02-05 10 views
2

私は、次の手順を実行している場合:基本的にC#一覧<GenericClass>(100)建設原則

List<GenericClass> listObj = new List<GenericClass>(100); 

// Do I need this part too? 
for (int i = 0; i < 100; i++) 
{ 
    listObj[i] = new GenericClass(); 
} 

C#コンパイラが自動的にリストに100個のGenericClassオブジェクトごとにGenericClassコンストラクタを起動する場合は、私が求めています。私はMSDNのドキュメントとここではStackOverflowを検索しました。

ありがとうございました。

+0

その部分が必要です。そうでなければあなたのリストには何も含まれません。 –

答えて

3

それはどのようにListが動作しないのですか。容量を指定すると、その容量はリストの項目数ではなく、最初の容量です。リストには、Addメソッドを使用して要素を追加するまで、要素は含まれません。リストには最大容量がありません。 Addメソッドを使ってオブジェクトを追加しているので、最初に新しいメソッドを追加する必要があります。

実際、あなたが質問に入れていることを実行すると、ArgumentOutOfRange例外がスローされます。

何をしているのか、配列を使用する必要があります。

var listObj = new List<GenericClass>(); 
listObj[0] = new GenericClass(); // ArgumentOutOfRange exception 

これは動作します:

for (int i=0;i<100;i++) 
{ 
    listObj.Add(new GenericClass()); 
} 

これは、あなたがしようとしていたものです。

var arrayObj = new GenericClass[100]; 
for (int i = 0; i < 100; i++) 
{ 
    arrayObj[i] = new GenericClass();     
} 
+0

クイック返信をありがとう。 C#Listには、.Add()メソッドが組み込まれています。新しいデフォルトのGenericClassオブジェクトを構築するために、引数なしで呼び出すだけですか? –

+0

いいえ何かをする必要はありません:listObj.Add(new GenericClass());それをリストに追加します。 –

+0

どうもありがとうございました。非常に役立ちます。 –

0

ありません!初期容量を指定します。

MSDN article

リストの容量が一覧 が保持できる要素の数です。要素がリストに追加されると、内部の 配列を再割り当てすることにより、必要に応じて自動的に容量が増えます( )。

+0

迅速な返信をありがとうございます。 –

1

はい、インスタンスを作成してリストに追加する必要があります。 http://msdn.microsoft.com/en-us/library/dw8e0z9z.aspx

新しいGenericClassインスタンスを追加するたびにリストがサイズ変更される必要がないように、リストに入れる要素の数を指定していますそれに。

0

Listで直接行うことはできないため、ヘルパーメソッドを使用してジェネレータを使用し、List(IEnumerableコレクション)オーバーロードを使用できます。

class Program 
    { 
     static void Main(string[] args) 
     { 
      var list = new List<string> 
      (
       Generator.New(() => new string('a', 5), 100) 
      ); 

      list.ForEach((x) => Console.WriteLine(x)); 
     } 
    } 

    public static class Generator 
    { 
     public static IEnumerable<T> New<T>(Func<T> generator, int nCount) 
     { 
      for (int i = 0; i < nCount; i++) 
      { 
       yield return generator(); 
      } 
     } 

     public static IEnumerable<T> New<T>(Func<int,T> generator, int nCount) 
     { 
      for (int i = 0; i < nCount; i++) 
      { 
       yield return generator(i); 
      } 
     } 
    } 

これは機能しますが、リストがこの機能をボックス外でサポートするかどうかはわかりません。サンプルプログラムは、5行のa文字からなる100行を出力します。