0


0

私は自分のプロジェクトを.NET 3.5にアップグレードしたところ、LINQを完全に利用できると思いました。 私のアプリケーションは実行時に開いているウィンドウを追跡するウィンドウマネージャを持っています、そして私はFindOpenWindowsジェネリックメソッドを追加しようとしています。 私がこれまでにやったこと:

openWindowsを一覧表示します。

パブリックリストFindOpenWindows(述語制約){var foundTs = openWindowsのフォームのどこから制約(フォーム)

foundTをListとして返します。 }

しかし、「デリゲートSystem.Predicateには無効な引数がいくつかあります」と表示されます。だから私はメソッドを次のように書き直しました。

パブリックリストFindOpenWindows(述語制約){var foundTs = openWindowsのフォームからの制約(フォームとしてのフォーム)

foundTをListとして返します。 }

この関数を非汎用にしなかったのは、呼び出し元が探しているウィンドウのタイプとまったく同じリストを取得するためです。

LINQとLambdaの式に慣れていないので、FindOpenWindowsの呼び出しでPredicateのコードを正確に記述する方法がわからない。 渡されたフォームがnullではないことを確認する必要があり、それが探しているタイプと一致するかどうかを確認する必要があることは明らかに必要です。

1 Answer


2


public List FindOpenWindows(Predicate constraint)ここでT:Form {var foundTs = openWindowsのフォームのwhere where constraint(form)

foundTs.ToList()を返します。 }

試してみてください。 TをForm型に制限する必要があります。