1. ホーム
  2. c#

[解決済み】List<X>からList<Y>へのキャストのためのより短い構文?

2022-04-04 11:02:19

質問

以下のように、アイテムのリストをある型から別の型に一度にキャストすることが可能であることを知っています(オブジェクトがキャスティングを行うためのパブリックな静的明示演算子メソッドを持っていると仮定します)。

List<Y> ListOfY = new List<Y>();

foreach(X x in ListOfX)
    ListOfY.Add((Y)x);

しかし、リスト全体を一度にキャストすることはできないのでしょうか?たとえば

ListOfY = (List<Y>)ListOfX;

解決方法は?

もし X を本当にキャストすることができます。 Y を使用することができるはずです。

List<Y> listOfY = listOfX.Cast<Y>().ToList();

注意すべき点(H/T to commenters!)

  • を含める必要があります。 using System.Linq; この拡張メソッドを取得するために
  • これはリストそのものではなく、リスト内の各項目をキャストします。新しい List<Y> の呼び出しによって作成されます。 ToList() .
  • このメソッドは、カスタム変換演算子をサポートしていません。( 参照 Linq Cast<> ヘルパーが暗黙のキャスト演算子で動作しないのはなぜですか? )
  • 明示的な演算子メソッドを持つオブジェクトに対して、このメソッドは動作しません(フレームワーク 4.0)