背景
我有一个接口 Interface1,它由 Interface2、Interface 3...等继承。除了接口 1 之外,所有其他接口都有具体的类(object2、object3..etc),它们实现了它们各自的接口 Interface 2、Interface 3...等。
我还有一组 Interface 1 类型的对象,我的意图是填充各种对象。
问题
我想从这个集合中提取一个特定的对象,并为它使用 lambda 表达式。
Object2 = IInterface1Collection.Single(item => item.GetType()==typeof(Object2)
&& ((Object2)item).Property1=="John" && ((Object2)item).Property2==0);
此代码给出 CA1800 的代码分析性能错误。它说
错误 1 CA1800:Microsoft.Performance:“item”,一个参数,在方法“Method1()”中多次转换为“Object2”类型。缓存“as”运算符或直接转换的结果,以消除多余的 castclass 指令。
如果我抑制该消息,它可以正常工作并使我满足条件的 Object2。
问题
如何避免此错误消息?我必须将 item 转换为 Object2 否则我无法达到它的属性。我负担不起创建 Object2 的集合。