次のサブクラスを作成できますList<T>
:
public class BaseTypeList : List<BaseType>
{
public void Add(string x, string y, string z)
{
Add(new DerivedType { x = x, y = y, z = z });
}
}
次に、コレクション初期化構文をより簡潔に使用できます。
new BaseTypeList
{
{ "x1", "y1", "z1" },
{ "x2", "y2", "z2" },
{ "x3", "y3", "z3" },
{ "x4", "y4", "z3" /* (sic) */ },
//...
}
これが機能するのは、コンパイラがコレクション初期化ブロックの要素ごとに個別のオーバーロード解決を実行し、指定された引数に一致するパラメータタイプを持つAddメソッドを探すためです。
同種の派生型が必要な場合、少し醜くなりますが、それは可能です。
public class BaseTypeList : List<BaseType>
{
public void Add(Type t, string x, string y, string z)
{
Add((BaseType)Activator.CreateInstance(t, x, y, z));
}
}
次に、次のようにコレクションを初期化します。
new BaseTypeList
{
{ typeof(DerivedType1), "x1", "y1", "z1" },
{ typeof(DerivedType1), "x2", "y2", "z2" },
{ typeof(DerivedType2), "x3", "y3", "z3" },
{ typeof(DerivedType2), "x4", "y4", "z3" /* (sic) */ },
//...
}