gpt4 book ai didi

c# - 调用 Clear 是否也会处理这些项目?

转载 作者:IT王子 更新时间:2023-10-29 04:31:31 25 4
gpt4 key购买 nike

很多时候有一个明确的方法,即从集合中删除所有项目,这些项目是否也被处理掉。

喜欢,

toolStripMenuItem.DropDownItems.Clear();

就足够了,或者我应该这样调用:

foreach (ToolStripItem item in toolStripMenuItem.DropDownItems)
{
toolStripMenuItem.DropDownItems.Remove(item);
item.Dispose();
}

编辑:好吧,ToolStripItem 是一个示例而不是问题,对于那些说 Clear 就足够的人,我找到了另一个示例,TabControl 也有项目集合和清除方法。但是 TabControls 可以有复杂的控件(至少我有),需要显式处理(即使它们在某些时候被 GC 自动处理,因为它们占用大量内存)。我想最好的答案是 divo comment 来处理这些项目,然后调用 clear。

最佳答案

问:是吗?

答: - Clear 不会处理这些项目(它们可以用于您应用程序的其他部分)。

那么,如果您的 ToolStripItems 是标准的 .NET 对象,Clear 是否就足够了?经过一番思考,我会说“可能不会”。

是的,这是真的,如果您将在应用程序的其他部分引用 ToolStripItem,.NET GarbageCollector 将销毁(使用类析构函数 ) 它自动。但是,它不会调用 Dispose(true) 方法,但是,这是表单的 IDisposable 所必需的> 组件。

阅读提案 thisthis .

实际上,我相信您需要显式地Dispose 您的 Items,就像 ToolStrip 的 Dispose 方法所做的那样(替换 this通过 yourToolStrip):

if (!this.Items.IsReadOnly)
{
for (int i = this.Items.Count - 1; i >= 0; i--)
{
this.Items[i].Dispose();
}
this.Items.Clear();
}

编辑

我还创建了 the following thread更普遍地澄清这个问题。

关于c# - 调用 Clear 是否也会处理这些项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1969024/

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