使用“as”并期望返回null

时间:2010-05-20 11:15:52

标签: c#

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

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

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

4 个答案:

答案 0 :(得分:13)

OfType()怎么办?

foreach( var grid  in m_stacker.Children.OfType<Grid>() ) { ... }

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

答案 1 :(得分:8)

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

但是,如果您不打算使用强制转换值,则只需使用is

使用is然后casting again with the cast operator (parenthesis) is frowned upon

答案 2 :(得分:2)

它会正常工作。但你可以做的只是使用“是”。

foreach(UIElement element in m_stacker.Children)
{
    if(element is Grid)
    {
      //apply changes here
    }
}

答案 3 :(得分:2)

如果您要将block用作Grid,那么这就是编码它的正确方法。

使用is进行检查(在我看来)产生的可读代码较少,如以下两个错误示例所示:

if (element is Grid)
{
    Grid block = element as Grid;
    // Do stuff
}

if (element is Grid)
{
    Grid block = (Grid)element;
    // Do stuff
}

不要执行其中任何一项

你说的是元素是一个网格然后投射它。