1

オブジェクトのグループ。ただし、次の場合は混乱しています。

サンプルクラス

class A
{
     public string Foo{get; set;}
}

class A_list
{
     public A[] list;
     public A_list(A[] _list)
     {
        list = new A[_list.Length];
        for (int i = 0; i < _list.Length; i++)
        {
            list[i] = _list[i];
        }
    }
}

static void Main(String[] args)
{
    A[] names = new A[3]
        {
            new A{Foo="some"},
            new A{Foo="another"},
            new A{Foo="one"}
        };

    A_list just_an_object = new A_list(names);
 }

上記のうち、配列または配列をフィールドとして保持するオブジェクトのカスタム コレクションであるか、または両方がカスタム コレクションであるか。

4

1 に答える 1

3

コレクションを「オブジェクトのグループ」として説明することは、技術的には正しいですが、少し還元的すぎます。より良い質問は、「有用なコレクションとは何ですか?」です。ここで、「有用」は、「どのようにそれを使用する必要があるか」を自問することになります。

さて、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ません。そのため、作成することをお勧めします。ZiplistArrayList<A>private

それを繰り返す以外に、コレクションでやりたいことがあるかもしれません。要素を追加または削除し、インデクサーを提供します(n番目の要素にアクセスできるようにするためjust_an_object[n])。IEnumerableと同様に、「標準化された」方法でそれらを実装できるようにするインターフェースがあります(ICollectionとIListを探してください)。

そして、「カスタム」の側面があります。すぐに使えるこれらすべてのことをすでに実行しているArrayまたはListを直接使用するのではなく、カスタムコレクションが必要であると判断したもの...

于 2012-12-16T19:09:49.390 に答える