我应该选择使用“is”还是“as”运算符?

5

相关内容:https://dev59.com/rnRB5IYBdhLWcg3w1Kle - JYelton
5个回答

16
第二种方式更可取,因为您只需投掷一次。

是的,这两个中第二个更好,但说实话还有更好的第三个选择:https://dev59.com/OVXTa4cB1Zd3GeqP2HoE#5397384 - jason
你可以使用 inline is 关键字: foreach (MyClass i in x) if (i is IMy a) a.M1(); - Derek Tremblay

10

我更喜欢第三个选项:

foreach(var i in x.OfType<IMy>()) {
    i.M1();
}

哇,这很酷,简短而且直接。 - Emmanuel F

8
第二种方法只进行一次转换。或者您可以使用 OfType 方法:
foreach (IMy i in x.OfType<IMy>()) {
  i.M1();
}

3
第二种方法更好,因为只需要进行一次类型转换。 这篇文章也可以帮助你理解。'as'操作会检查类型并返回一个转换后的对象或null - 所有工作都由它完成。

3
第二种方法。代码行数相同,但可以避免两次进行强制类型转换。
请注意,虽然第二种方法更好,但如果类型是值类型,则无法使用。您只能在引用类型或可空类型上使用as

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接