2014-03-28 36 views
0

我想投WrapPanel铸造和使用结果在一行

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

,这样它看起来就像是

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

这可能吗?

+2

这种性能和铸件的“链接”追空引用时,可能会导致大量的工作并索引超出范围的例外。将它们保持在不同的行上,并检查是否存在空值和索引范围。 –

回答

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

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

1

裹投括号,你是好去 -

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

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

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

这是不一样的演员,仿佛topSP.Children[0]不是WrapPanel,这将抛出NullReferenceException,如在那种情况下(topSP.Children[0] as WrapPanel) == null

+0

真的吗? Downvoted?请仔细解释一下,为什么你低估了一个完全有效的答案? –

+2

尽管我没有对任何东西(既不是你的也不是Rohits)投票,我认为你根据保罗的两个班轮失踪了一个'.Children'的等级。 – nvoigt

+0

@nvoigt好的地方。看到你有同样的问题:-)解决了这个问题。然而,并不是简单的评论就足以让它得到修复。 –

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