ArrayListを自分好みに

C# には System.Collections.ArrayList がありますので、これを使ってインスタンスを動的配列に Add していく、なんていうことは誰でもやってることと思います。が、この配列クラスは object 型(参照型)用ですので、キャストの嵐になってしまって、逆に見難くなってしまうことがあります(その代わり参照型であれば何でも入れることが可能)。これを解消する為の独自配列クラスを System.Collections.ArrayList を継承して作ってみたいと思います。例によって無保証です。

using System;

public class myArrayList : System.Collections.ArrayList
{
	public new myClass this [int index]
	{
		get { return (myClass)base[index]; }
		set { base[index] = (object)value; }
	}
}

public class myClass
{
	public int x;
	public int y;
	
	public myClass()
	{
		myArrayList myarray = new myArrayList();
		myarray.Add(new myClass);
		myarray[0].x = 100; // ArrayList だと ((myClass)myarray[0]).x = 100;
		myarray[0].y = 200; // ArrayList だと ((myClass)myarray[0]).y = 100;
	}
}

こんな感じですね。上記コードではインデクサだけですが、他のメソッドも同じように行えばキャストがいらなくなりますし、sort や foreach も自分で定義すれば独自の順番で扱えるようになります。超便利!汎用性は無くなってしまうので、myClass を継承して他のクラスを作る場合とかは object 型として扱わないと駄目ですが、用途を限定出来るのであればかなり便利ですよね。

でももっと便利で簡単な方法があれば、迷わずそっちを使います!