LINQ to Object のイディオム その1 : Cast() と OfType()
昨日の LINQ to Object コードが読めなくなる前に(^^; メモを少し書き散らしておきます。
- IEnumerable を LINQ to Object で扱うには Cast
() か OfType () で IEnumerable に変換する。古くからある非ジェネリクスなコレクションを LINQ で扱うには変換必須。 - Cast
() と OfType () はどちらもシーケンスの各要素をキャストして列挙する - Cast
() はそのままキャストするだけ。キャストできないと例外が飛ぶ。(パイプと例外は相性が悪いけど、それはまた別の話) - OfType
() は is T だけ列挙する。is T でなければ飛ばす。IEnumerable シーケンスから T 型だけ抜き出すフィルタ。
実はこの違いはコード見れば一目で理解できるんですけどね(^^;
型混在のコレクションなんてあまり使わないので、Cast
from PropertyData p in mo.Properties
は
mo.Properties.Cast<PropertyData>()
に変換されます。
ヘジたんによる説明は このあたり。