我有这段代码:
foreach (UIElement uiElement in list)
{
uiElement.SetValue(Grid.ColumnProperty, colunmn++);
uiElement.SetValue(Grid.RowProperty, _uiRoot.RowDefinitions.Count - 1);
_uiRoot.Children.Add(uiElement);
}
它运行正常,但Code Contracts给了我一个警告:可能在空引用上调用一个方法,uiElement。
uiElement怎么可能为空?该列表是List
UIElement
,因此它应该遍历列表而不会出现任何空值。
答案 0 :(得分:2)
因为您可以在列表中放置空值,即使您可能不会
你可以做到
foreach (UIElement uiElement in list.Where(e => e != null))
{
uiElement.SetValue(Grid.ColumnProperty, colunmn++);
uiElement.SetValue(Grid.RowProperty, _uiRoot.RowDefinitions.Count -1);
_uiRoot.Children.Add(uiElement);
}
答案 1 :(得分:1)
列表可以包含空引用。您可以将null插入列表中。您还可以在列表中插入一个好的引用,然后将其设置为null。 例如,如果我有一个People列表,我可以列出: “鲍勃”,“弗雷德”。 现在我从列表中抓取Bob,做一些事情,并将其更改为null。 列表包含引用列表而不是项目。所以它指向项目所在的位置。现在,当您遍历列表时,位置0现在为空,因为Bob现在包含空值的引用。