gpt4 book ai didi

c# - 这是 Silverlight InkPresenter 中的错误吗

转载 作者:行者123 更新时间:2023-11-30 21:17:43 25 4
gpt4 key购买 nike

这是一段不言自明的代码:

while (myInkPresenter.Children.Count > 0)
{
myInkPresenter.Children.RemoveAt(myInkPresenter.Children.Count - 1);
}

然后我想到一个更好的方法可能是:

foreach (UIElement item in myInkPresenter.Children)
{
myInkPresenter.Children.Remove(item);
}

然而,这会引发错误:由于对象的当前状态,操作无效。于是灵机一动,又加了一行代码:

foreach (UIElement item in myInkPresenter.Children)
{
myInkPresenter.Children.Remove(item);
if (myInkPresenter.Children.Count == 0) break;
}

现在它工作正常。

我的问题是这是一个错误还是我应该出于某种原因期待这种行为?

最佳答案

您的代码只有在只有一个 child 时才有效。如果有更多,它将中断 - 它会尝试找到“下一个”项目,并注意到其内部集合已更改,从而使迭代器无效。

这与 InkPresenter 本身无关 - 几乎所有 .NET 中的集合都是这样工作的。基本上,您不应该在迭代集合时修改它。 (.NET 4 中的并发集合是该规则的一组值得注意的异常(exception)。)

鉴于您只想清除子项列表,为什么不直接调用:

myInkPresenter.Children.Clear();

?更简单、更易读、更高效。

关于c# - 这是 Silverlight InkPresenter 中的错误吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4649641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com