在一行中强制转换和使用结果

本文关键字:转换 结果 一行 | 更新日期: 2023-09-27 17:54:15

我想转换WrapPanel

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

让它看起来像这样

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

这可能吗?

在一行中强制转换和使用结果

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

请注意,可能有更好的方法。

是的,你可以,但是所有这些属性和类型转换的"链接"在追逐空引用和索引超出范围异常时可能会导致大量工作。将它们放在单独的行中,并检查空值和索引范围。

所以即使这可能有效:

((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);
    }
}

将强制类型转换为圆括号就可以了-

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

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

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

这与强制转换不同,如果topSP.Children[0]不是WrapPanel,这将抛出NullReferenceException,就像在这种情况下(topSP.Children[0] as WrapPanel) == null一样。