配列を異なる型の配列へキャストする
ある型の配列を異なる型の配列へキャストしようとしても、簡単な方法では上手くいきません。ここでは数値の型を例に解決方法について紹介します。
配列を用意してコピーする
次のパターンは上手くいきません。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(); } }