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

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

Barbara Streisand
Barbara Streisandオリジナル
2025-01-10 09:57:41644ブラウズ

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.

が生成されます。

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

<code class="language-csharp">var castedList = list.Select(i => (long)i);</code>

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

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。