ジェネリックメソッドを用いて引数・返り値の型を動的に

2020-03-25

メソッドの引数・返り値にジェネリックを用いることで、
型が異なる処理を同一のメソッドで行うことができる

サンプルデータクラス

    public class clsIntStruct
    {
        public int Value1 { get; set; }
        public int Value2 { get; set; }
    }

    public class clsDoubleStruct
    {
        public double Value3 { get; set; }
        public double Value4 { get; set; }
    }

処理クラス

引数に渡されたクラスを、10個の配列にして返している
その際、渡されたクラス内のプロパティを動的に取得、格納している

    public class clsToArray
    {
        public static List<T> StructToArray<T>(T objStrust) where T:class, new()
        {
            List<T> arrayResult = new List<T>();

            for(int intCount = 0; intCount < 10; intCount++)
            {
                T objWork = new T();

                foreach (PropertyInfo objInfo in objStrust.GetType().GetProperties())
                {
                    objInfo.SetValue(objWork, objInfo.GetValue(objStrust));
                }

                arrayResult.Add(objWork);
            }

            return arrayResult;
        }
    }

呼び出しサンプル

        public MainWindow()
        {
            InitializeComponent();

            // Int型のクラス
            clsIntStruct objInt = new clsIntStruct();
            objInt.Value1 = 3;
            objInt.Value2 = 10;

            List<clsIntStruct> resultInt = clsToArray.StructToArray(objInt);

            // Double型のクラス
            clsDoubleStruct objDouble = new clsDoubleStruct();
            objDouble.Value3 = 1.5;
            objDouble.Value4 = 9.7;

            List<clsDoubleStruct> resultDouble = clsToArray.StructToArray(objDouble);

        }