24

気が狂っているかもしれませんが、これは有効なキャストだと思いました:

(new int[]{1,2,3,4,5}).Cast<double>()

LinqPad がスローする理由

InvalidCastException: 指定されたキャストは無効です。

?

4

1 に答える 1

37

C# では、 からintに直接変換できますが、 からに変換することはできdoubleません。intobjectdouble

int i = 1;
object o = i;
double d1 = (double)i; // okay
double d2 = (double)o; // error

Enumerable.Cast拡張メソッドは後者のように動作します。値を別の型に変換するのではなく、値が既に期待される型であると主張し、そうでない場合は例外をスローします。

(new int[]{1,2,3,4,5}).Select(i => (double)i)代わりに、値を変換する動作を取得することを試みることができます。

于 2012-09-28T20:41:32.193 に答える