お問い合わせ

tel:0570-046-503

営業時間 10:00~17:00(定休日:土日祝日)

ジェネリックス型変換

   2015/08/04

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();
        }


理解できれば、型ごとに似たようなメソッドを書く必要がなく、無駄を省くことができます。

  • ブログランキング・にほんブログ村へ
  • FC2ブログランキングへ
  • 人気ブログランキングへ
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)