C# の Enumerable.Cast
と InvalidCastException
を理解する
Enumerable.Cast<T>
を使用して IEnumerable<int>
を IEnumerable<long>
に変換すると、一般的な C# エラーが発生します。 型の互換性が明らかであるにもかかわらず、予期しない InvalidCastException
が発生します。
その理由は、Enumerable.Cast<T>
の機能にあります。 これは汎用コレクションに特化したメソッドではありません。 IEnumerable
レベルで動作し、ボックス化されていない値を扱います。
したがって、IEnumerable<int>
から要素をキャストするとき、各 int
はすでに object
としてボックス化されています。 ボックス化された int
を long
に直接キャストしようとすると失敗し、InvalidCastException
.
解決策は、クエリ内の各要素を明示的にキャストすることです。
var castedList = list.Select(i => (long)i);
この Select
メソッドは、項目ごとに int
から long
への変換を実行し、ボックス化の問題を回避します。 このダイレクト キャストは、値の型変換を処理する際の Enumerable.Cast<T>
の制限を回避します。
以上が`IEnumerable` を `IEnumerable` にキャストすると、`Enumerable.Cast` が `InvalidCastException` をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。