バックグラウンド
Interface2、Interface 3などに継承されるインターフェイスInterface1があります。インターフェイス 1 を除いて、他のすべてのインターフェイスには、それぞれのインターフェイス インターフェイス 2、インターフェイス 3 などを実装する具象クラス (object2、object3..etc) があります。
また、タイプ Interface 1 のオブジェクトのコレクションもあり、さまざまなオブジェクトを設定するつもりです。
問題
このコレクションから特定のオブジェクトを抽出したいので、ラムダ式を使用しています。
Object2 = IInterface1Collection.Single(item => item.GetType()==typeof(Object2)
&& ((Object2)item).Property1=="John" && ((Object2)item).Property2==0);
このコードにより、CA1800 のコード分析パフォーマンス エラーが発生しています。それは言う
エラー 1 CA1800: Microsoft.Performance: パラメータの 'item' が、メソッド 'Method1()' で型 'Object2' に複数回キャストされています。冗長な castclass 命令を排除するために、'as' 演算子または直接キャストの結果をキャッシュします。
メッセージを非表示にすると、正常に機能し、条件を満たす Object2 が取得されます。
質問
このエラー メッセージを回避するにはどうすればよいですか? そうしないと、そのプロパティに到達できないため、アイテムを Object2 にキャストする必要があります。代わりに Object2 のコレクションを作成する余裕はありません。