我的脚本有两个问题需要帮助理解。
if
语句在原始列表中查找匹配值。然后删除它。由于某种原因,这不起作用。 items.Remove(item)
并未实际删除该项目。
else语句有效。但我有一种感觉,我可以在一条线上完成这一切。
思考?如果可能的话我想避免把它列为清单。它原来是ObservableCollection
。
var items = TreeViewCollection.ToList();
if (items.Contains(SelectedTreeViewItem))
items.Remove(SelectedTreeViewItem);
else
items.ForEach(e=>e.Nodes.Remove(SelectedTreeViewItem));
更新:我已经更新了代码以使其更有意义。
我的目标是将其分成一行。
if (TreeViewCollection.Contains(SelectedTreeViewItem))
TreeViewCollection.Remove(SelectedTreeViewItem);
else
TreeViewCollection.ToList().ForEach(e=>e.Nodes.Remove(SelectedTreeViewItem));
答案 0 :(得分:0)
创建新列表会适得其反。 SelectedTreeViewItem
将从列表中删除,但不会从原始集合中删除。
ForEach
不是IEnumerable的扩展方法,它是List<T>
类的常用方法。它返回void
,因此它只能在Linq方法链的末尾。使用foreach
可以使代码更简单,并清楚地说明其意图:
bool del = TreeViewCollection.Remove(SelectedTreeViewItem);
if (false == del)
foreach(var t in TreeViewCollection)
t.Nodes.Remove(SelectedTreeViewItem);