2009-03-22 12 views
2

foreachループから返されたアイテムを特定のタイプに制限するための方法をここで見てきました。これは、正しく覚えていれば、IEnumerableのLINQ拡張とタイプチェックのラムダ。私は再びそれを見つけることができません、誰もこれが達成された方法を提案することができますか?タイプLINQ拡張を使用するforeachの制約事項

+0

:それを使用する

、あなたはこのような何かをしたいです。 –

+0

@Thomasでは、foreachループは実際には個々のアイテムではなく列挙子を作成し、列挙子はオブジェクトを返す( 'returns')オブジェクトですが、私は簡潔さを目指していました。 – ProfK

答えて

3

次のようにあなたは、どこに拡張メソッドの呼び出しでこれを行うことができます:

foreach(var x in theCollection.Where(i => i.GetType() == typeof(DesiredType)) 
{ 
    // Do something to x 
} 

しかし、これはそれは.NETフレームワークに組み込まれているように有用であり、それがどのようなクリスです上を指しています。 IEnumerableにはOfTypeという拡張メソッドがあり、hereと記載されています。私は本当にあなたが「の項目は、foreachループから返された」との意味を理解していない

foreach(var x in theCollection.OfType<int>()) 
{ 
    // Do something to x 
} 
+0

これは完全に同じではないことに注意してください.GetType()を呼び出して、等価演算子と比較すると、継承の状況で動作が異なります。 「is」演算子(すなわち、Where(i => iはDesiredType))はOfTypeに近い。 –

+0

はい、そうです。 OfTypeは "これをキャストできますか?"という質問をします。したがって、TypeのIsAssignableFrom()メソッドによく似ています。 –

8

これはお探しですか?

public static IEnumerable<TResult> OfType<TResult>(
    this IEnumerable source 
)