使用"as"并期望返回null

DrL*_*zer 5 c#

例如.假设我们在表单上有一个stackpanel.它充满了网格和标签.我想循环遍历所有网格并对它们进行一些操作,但保留Lables完整.目前我正是这样做的.

foreach(UIElement element in m_stacker.Children)
{
    Grid block = element as Grid;
    if(block != null)
    {
      //apply changes here
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我使用的事实是"as"如果无法转换为所需类型则返回null.这是一件好事还是有更好的解决方案来解决这个问题?

tan*_*ius 13

那么OfType()呢?

foreach( var grid  in m_stacker.Children.OfType<Grid>() ) { ... }
Run Code Online (Sandbox Code Playgroud)

这将仅循环到Grid类型的子节点,因此根本不需要强制转换或检查类型.

  • 实际上,`OfType <T>()`在内部完全相同.;-) (3认同)
  • @Oliver:但代码看起来更可读,而且这种方式更短. (3认同)

Meh*_*ari 8

是的,这是正确的方法(考虑"应用更改"将需要使用演员结果).

但是,如果您不打算使用强制转换值,则可以使用is.

使用is然后再次使用强制转换操作符(括号)进行强制转换是不受欢迎的.