Top > Programming > .NetFramework > Tips > CastArrayToAnotherArray
Last-modified: Mon, 11 Nov 2013 16:03:46 JST
Counter:24756 Today:5 Yesterday:15 Online:4
このエントリーをはてなブックマークに追加

配列を異なる型の配列へキャストする

ある型の配列を異なる型の配列へキャストしようとしても、簡単な方法では上手くいきません。ここでは数値の型を例に解決方法について紹介します。

配列を用意してコピーする

次のパターンは上手くいきません。double>intなので上手くいきそうに見えますが、配列は参照型であるのでキャストできません。

int[] intArray = new int[]{0, 1, 2};
double [] doubleArray = intArray;

次のパターンも一見上手くいきそうですが、実行時にエラーになります。

int[] intArray = new int[] { 0, 1, 2 };

double[] doubleArray = intArray.Cast<double>().ToArray<double>();
double[] doubleArray = (double[])intArray.Cast<double>();

複雑な参照型の場合には、配列の中身を確認したりして解決するしかありませんが、数値型のとき、次のようにキャストのような処理によって問題を解決します。

同じ長さのdoubleの配列を用意して、intの配列から値を複製します。

int[] intArray = new int[] { 0, 1, 2 };
double[] doubleArray = new double[intArray.Length];
intArray.CopyTo(doubleArray,0);

サンプルプロジェクトを用意するには内容が短いので、試験用のソースコード全文を掲載します。

    class Program
    {
        static void Main(string[] args)
        {

            int[] intArray = new int[] { 0, 1, 2 };
            double[] doubleArray = new double[intArray.Length];
            intArray.CopyTo(doubleArray, 0);

            //一見できそうだが駄目なパターン
            //double[] doubleArray = intArray.Cast<double>().ToArray<double>();
            //double[] doubleArray = (double[])intArray.Cast<double>();

            Console.ReadLine();
        }
    }