ジェネリックス型変換
C#2.0からジェネリクスなどと呼ばれるものが実装されました。
Javaをご存知の方ならば総称型といったほうがピンとくるかもしれません。
こちらでは、配列とArraryListの相互変換ジェネリックメソッドをご紹介します。
/// <summary> /// 配列をリストに変換する /// </summary> /// <param name="t">配列</param> /// <returns>リスト</returns> public static List<Type> ConvertArrayToList(Type[] t) { return new List<Type>(t); } /// <summary> /// リストを配列に変換する /// </summary> /// <param name="list">リスト</param> /// <returns>配列</returns> public static Type[] ConvertListToArray(List<Type> list) { return list.ToArray(); }
メソッド名の後ろに、<> で囲って、 型をパラメータとして指定することができます。
上のメソッドは、配列をListに、下のメソッドはListを配列に変換します。
ともに型に関係なく同じ処理を行うことが出来ます。
もしも、指定できる型に制限をかけたい場合は、where キーワードを使います。
制約の与え方は下記の四つになります
- where T : struct 型Tは値型である
- where T : class 型Tは参照型である
- where T : new() 型Tはコンストラクタをもつ
- where T : BaseClass 型Tは[BaseClass]を継承している
- where T : interface 型Tは[interface]を実装している
たとえば、特定のクラスを継承した型で制約をかけたい場合は以下のようになります。
/// <summary> /// 配列をリストに変換する /// </summary> /// <param name="t">配列</param> /// <returns>リスト</returns> public static List<Type> ConvertArrayToList(Type[] t) where T : BaseClass { return new List<Type>(t); } /// <summary> /// リストを配列に変換する /// </summary> /// <param name="list">リスト</param> /// <returns>配列</returns> public static Type[] ConvertListToArray(List<Type> list) where T : BaseClass { return list.ToArray(); }
理解できれば、型ごとに似たようなメソッドを書く必要がなく、無駄を省くことができます。
この記事へのコメントはこちら