コレクションを「オブジェクトのグループ」として説明することは、技術的には正しいですが、少し還元的すぎます。より良い質問は、「有用なコレクションとは何ですか?」です。ここで、「有用」は、「どのようにそれを使用する必要があるか」を自問することになります。
さて、A_ListのArrayフィールドは間違いなくコレクションです(「カスタム」フィールドではありません)が、あなたA_List
は(おそらく)コレクションですが、それは便利なものですか?
コレクションは、それらすべてに対する操作を一般化するためにまとめた、一般的に関連するオブジェクトのグループです。コレクションの使用方法はたくさんありますが、最も一般的な方法は、多くのプログラミング言語でほぼ標準化されています。たとえば、コレクションを「有用」にするためには、通常、少なくとも最初から最後まで順方向のみのループでその要素を読み取ることができる必要があります。A_Listはこれを直接提供しません。これを行うためのカスタムメソッドを簡単に追加できますが、一歩先に進んで既存のインターフェイスを実装することもできます。
A_Listに実装IEnumerable<T>
した場合、それを反復処理できるだけでなく、を期待する多くの既存のコード内の他のコレクションと交換可能にA_Listを使用することもできますIEnumerable
。例えば:
class A_list : IEnumerable<A>
{
// ... your other code
public IEnumerator<A> GetEnumerator()
{
return ((IEnumerable<A>)list).GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return list.GetEnumerator();
}
}
main
あなたの:でこれを行うことができます
foreach(var a in just_an_object)
{
Console.WriteLine(a.Foo);
}
または、Linqで使用できます。
var numbered=just_an_object.Zip(Enumerable.Range(0,3),(a,b) => b.ToString() + a.Foo);
現在、番号はIEnumerable<String>
3つの値(0some、1another、2one)のaですが、これは重要ではありません。重要な点は、(実装することによりIEnumerable<T>
)just_an_objectを、配列、リスト、またはその他のほとんどの「標準」コレクションと同じように機能するLinqメソッドで使用できることです。また、自分のフィールドが自分で実装した赤黒木ではなく、赤黒木であることを知る必要もありforeach
ません。そのため、作成することをお勧めします。Zip
list
Array
List<A>
private
それを繰り返す以外に、コレクションでやりたいことがあるかもしれません。要素を追加または削除し、インデクサーを提供します(n番目の要素にアクセスできるようにするためjust_an_object[n]
)。IEnumerableと同様に、「標準化された」方法でそれらを実装できるようにするインターフェースがあります(ICollectionとIListを探してください)。
そして、「カスタム」の側面があります。すぐに使えるこれらすべてのことをすでに実行しているArrayまたはListを直接使用するのではなく、カスタムコレクションが必要であると判断したもの...