クラスがその場所を配列内に格納するのは悪い習慣ですか?
同様に、コレクションが各オブジェクトの内部の場所を維持するのは悪い習慣ですか?
これらが悪い習慣である場合、配列内のオブジェクトの位置にすばやくアクセスしたり、その位置を維持したりするためのより良い方法は何ですか?
クラスがその場所を配列内に格納するのは悪い習慣ですか?
場合によりますが、多くの場合、はい。問題は、単一責任の原則を破っていることです。クラスはその状態を維持するだけでなく、他のコンテナー内の「位置」も維持する必要があります。
クラスが複数のコンテナーにあるなどのシナリオを処理する明確な方法がないため、これは脆弱な設計につながる可能性があります。また、アイテムを移動すると、より多くのコードを維持することになります (コレクション + クラスの内部表現を変更する) など。
クラスが別のクラス (この場合は配列) 内に格納されているオブジェクトの場合、オブジェクトが自身のどこに格納されているかを伝えるのは、そのクラスの責任です。オブジェクトが他の 1 つのクラスにのみ格納されることが保証されている場合、含まれているクラスの含まれているクラスに参照がある可能性がありますが、それはそれについてです。
コレクションを使用する場合、これはまさにあなたができることです:
private class MyData
{
// ...
}
private List<MyData> myDataList = new List<MyData>();
public void SomeMethod()
{
MyData myData = ...;
int position = myDataList.IndexOf(myData);
}
絶対に必要な場合を除き、配列を使用しないでください。そして、可能であれば、いくつかの古いレガシー API から取得した配列をコレクション (つまりリスト) に変換し、それらを使い終わったら、それらを配列に戻すだけです。