結論
LINQ自体の実装に問題がある。
Select
クエリを使う。
自分用にメモ。
#いきさつ
int[]
をdouble[]
にキャストしたい時にCast<double>()
を使ったらエラーになってしまった。
要素のアップキャストなのになぜか失敗する。
int[] hoge = { 1, 2, 3 };
// InvalidCastExceptionが発生する
var fuga = hoge.Cast<double>();
// 結果は空(すなわちキャスト出来ていない)
var piyo = hoge.OfType<double>();
なんで
内部実装ではシーケンス要素を一旦object
型にキャストしてからT
型にキャストしている模様。
参考:
C# IEnumerable.Castメソッドでint→longはできない
OfTypeメソッドとCastメソッド
Enumerable.Castメソッドの罠
// 要素に対する等価式(当然例外になる)
var element = (double)((object)1);
#どうする
上記リンク通りこれでOK。
var fuga = hoge.Select(a => (double)a);
#終わりに
アカウントがあるのに何も書かないのはアレなので。