最初に、using System.Linq;
がファイルの先頭にあることを確認してください。
foreach (var control in Controls.Cast<Control>()
.Where(i => i.GetType() == typeof(TextBox))) {...}
:あなたはIEnumerable
なくIEnumerable<T>
を実装するコレクションを持っていますが、あなたがオブジェクトを知っている場合
指定された型(のようなControl
)のすべてです、あなたはCast<T>
LINQの拡張メソッドを使用することができますしかし、あなたのWhere
句を考えると、それだけで特定のタイプのものを返すOfType<T>
方法を、使用することを、この場合には、より賢明かもしれません(何が間違っている場合Cast<T>
が例外をスロー):
foreach (var control in Controls.OfType<TextBox>()) {...}
このバージョンとの若干の違いは、GetType() == typeof(TextBox)
バージョンでは表示されないサブクラスがTextBox
であることです。
基本的には、LINQの拡張メソッドのほとんどが唯一IEnumerable<T>
/IQueryable<T>
、ないIEnumerable
/IQueryable
のために定義されています。
ありがとうございました。私は実際に、OfTypeから区別するために、「どこで」どこの型を使用して、正確な型だけを取得し、すべての代入可能型を取得するのではないかと考えていました。キャストはうまく動作します。 –
ProfK