foreach (MyClass i in x)
{
if (i is IMy)
{
IMy a = (IMy)i;
a.M1();
}
}
或
foreach (MyClass i in x)
{
IMy a = i as IMy;
if (a != null)
{
a.M1();
}
}
答案 0 :(得分:16)
当你施放1次时,第二个更可取
答案 1 :(得分:10)
我更喜欢第三种选择:
foreach(var i in x.OfType<IMy>()) {
i.M1();
}
答案 2 :(得分:8)
第二个,因为只有一个演员。或者您可以使用OfType
方法:
foreach (IMy i in x.OfType<IMy>()) {
i.M1();
}
答案 3 :(得分:3)
第二个是可取的,因为你只投了一次。
This article也可以帮助理解这一点。 'as'操作执行'is'检查并返回一个已转换的对象或null - 为您完成所有工作。
答案 4 :(得分:3)
第二个。这是相同数量的代码行,但你避免做两次演员。
请注意,虽然第二个是优选的,但它不会起作用,类型是值类型。您只能在引用或可空类型上使用作为。