在c#中的开关中使用'is'关键字

sre*_*sre 17 c# switch-statement

我目前正在为此代码添加一些新的扩展类:

foreach (BaseType b in CollectionOfExtendedTypes) {
  if (b is ExtendedType1) {
    ((ExtendedType1) b).foo = this;

  }
  else if (b is ExtendedType2) {
    ((ExtenedType2) b).foo = this;

  } 
  else {
    b.foo = this;

  }
}
Run Code Online (Sandbox Code Playgroud)

并且好奇是否有办法is在switch语句中使用关键字功能?

Aus*_*nen 13

这看起来像是一个良好的多态实现的情况.如果覆盖派生类中的相应方法,则可能根本不需要循环中的检查.

  • 当然,有时你不能这样做,但是 (2认同)

Mik*_*keT 11

最新版本的C#(7)现在包含此功能

键入模式

类型模式可以实现简洁的类型评估和转换.当与switch语句一起使用以执行模式匹配时,它会测试表达式是否可以转换为指定的类型,如果可以,则将其转换为该类型的变量.它的语法是:

   case type varname 
Run Code Online (Sandbox Code Playgroud)

  • 这是太棒了!感谢您将此添加到一个旧问题中,现在应该将其标记为答案。 (2认同)