ホームページ > バックエンド開発 > C++ > `IEnumerable` を `IEnumerable` にキャストすると、`Enumerable.Cast` が `InvalidCastException` をスローするのはなぜですか?

`IEnumerable` を `IEnumerable` にキャストすると、`Enumerable.Cast` が `InvalidCastException` をスローするのはなぜですか?

Barbara Streisand
リリース: 2025-01-10 09:57:41
オリジナル
643 人が閲覧しました

Why Does `Enumerable.Cast` Throw an `InvalidCastException` When Casting `IEnumerable` to `IEnumerable`?

C# の Enumerable.CastInvalidCastException を理解する

Enumerable.Cast<T> を使用して IEnumerable<int>IEnumerable<long> に変換すると、一般的な C# エラーが発生します。 型の互換性が明らかであるにもかかわらず、予期しない InvalidCastException が発生します。

その理由は、Enumerable.Cast<T> の機能にあります。 これは汎用コレクションに特化したメソッドではありません。 IEnumerable レベルで動作し、ボックス化されていない値を扱います。

したがって、IEnumerable<int> から要素をキャストするとき、各 int はすでに object としてボックス化されています。 ボックス化された intlong に直接キャストしようとすると失敗し、InvalidCastException.

が生成されます。

解決策は、クエリ内の各要素を明示的にキャストすることです。

var castedList = list.Select(i => (long)i);
ログイン後にコピー

この Select メソッドは、項目ごとに int から long への変換を実行し、ボックス化の問題を回避します。 このダイレクト キャストは、値の型変換を処理する際の Enumerable.Cast<T> の制限を回避します。

以上が`IEnumerable` を `IEnumerable` にキャストすると、`Enumerable.Cast` が `InvalidCastException` をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート