在一行中转换和使用结果

时间:2014-03-28 08:42:07

标签: c# wpf casting

我想投射WrapPanel

wp = (WrapPanel)topSP.Children[0];
wp.Children.Add(txtB1);

所以它看起来像那样

topSP.Children[0](WrapPanel).Add(txtB1);

可能吗?

4 个答案:

答案 0 :(得分:4)

((WrapPanel)topSP.Children[0]).Children.Add(txtB1);

请注意,可能有更好的方法。但这应该有用。

答案 1 :(得分:2)

是的,你可以,但所有这些'链接'当追逐空引用和索引超出范围异常时,属性和强制转换可能会导致很多工作。将它们保持在单独的行上并检查空值和索引范围。

即使这可能有效:

((WrapPanel)topSP.Children[0]).Children.Add(txtB1);

这样做更安全:

if(topSP.Children.Count > 0)
{
    var wrapPanel = topSP.Children[0] as WrapPanel;
    if(wrapPanel != null)
    {
        wrapPanel.Children.Add(txtB1);
    }
}

答案 2 :(得分:1)

在括号中包裹,你很高兴 -

((WrapPanel)topSP.Children[0]).Children.Add(txtB1);

答案 3 :(得分:1)

另一种改变类型的方法是:

(topSP.Children[0] as WrapPanel).Children.Add(txtB1);

这与演员表不同,好像topSP.Children[0]不是WrapPanel,这会抛出NullReferenceException,就像那个案例(topSP.Children[0] as WrapPanel) == null一样。