来自list.Clear()
Count设置为0,并且还会释放对集合元素中其他对象的引用。
从我所教过的(可能是错的),处理过的&发布的是不同的东西。 Disposed表示项目已从内存中完全删除,释放意味着它不会被指针绑定到该列表。
这是否意味着我需要做
foreach (var item in Items)
{
item.Dispose();
}
this.Items.Clear();
如果我有效地希望完全销毁/清除/释放/删除列表?
对我而言,它应该像.Clear()
一样简单,但是,如果这是足够和正确的话,对我来说有点不清楚(双关语)。
请注意,我们并未覆盖Dispose()
或Clear()
,这是所有默认实施。
此外,列表是List<T>
。
编辑:根据评论建议,我已经去检查过,这些项目都是IDisposables
,这可以说明他们应该被处置
对What is IDisposable for? 重复澄清:
我不认为这两个问题是相同的,我的问题是两件事之间的区别,另一个是要求澄清其中一件事。在我决定写这个问题之前,它也没有出现在我的搜索中,因为我过于专注于像#34;差异配置与清除&#34;这样的关键字,这可能也是未来寻找答案的开发人员的情况。我承认其他答案提供了更多信息,是一个很好的链接,可以在这里添加。
答案 0 :(得分:2)
不,List<T>.Clear
没有dispose个对象。如果你愿意,你可以写一个扩展名:
public static class IEnumerableExtensions
{
public static void DisposeAll<T>(this IEnumerable<T> seq) where T : IDisposable
{
foreach (T d in seq)
d?.Dispose();
}
}
var connections = new List<SqlConnection>();
// ...
connections.DisposeAll();
答案 1 :(得分:1)
从我所教过的(可能是错的),处理过的&amp;发布的是不同的东西。
真。
Disposed意味着项目已从内存中完全删除,释放意味着它不会被指针绑定到该列表。
错误。 Disposed意味着完成与托管内存无关的对象所需的任何清理。
如果元素是IDisposable
,那么在清除之前Dispose()
所有元素确实是一个好主意,如果它们通常是通过该列表到达的,那么其他任何内容都不会Dispose()
。
如果他们不是IDisposable
,这不仅不需要,而且也不可能。
如果它们是IDisposable
但其他内容仍然会使用这些元素,那么您不应该Dispose()
它们,因为这会破坏其他用途。
答案 2 :(得分:0)
据我所知,Dispose()
在某些方面非常有用,例如,如果您正在处理资源并且想要在内存中清除这些资源,或者如果发生任何异常,那么您肯定需要处理
只是一个提示:当您使用语句代码时基本上不需要包含Dispose()
方法
using(var someResource = new SomeResource()){
// Some galaxy logic here
}
因为它有Dispose机制。如果这些资源不是CLR的管理,那么只使用using
语句将是一个简单的选择。