我不同意你不應該做任何事情,如果你不需要列表中的對象了。如果這些對象實現了System.IDispoable接口,那麼該對象的設計者就會認爲該對象擁有稀缺資源。如果你不需要它,只需將null賦值給對象,那麼這些稀有資源不會被釋放,直到垃圾回收器完成對象。同時,您不能將此資源用於其他方面。
示例: 考慮從文件創建位圖,並決定不再需要位圖和文件。代碼可能看起來像如下:
using System.Drawing;
Bitmap bmp = new Bitmap(fileName);
// do something with bmp until not needed anymore
bmp = null;
File.Delete(fileName); // ERROR, filename is still accessed by bmp.
的好方法是:
bmp.Dispose();
bmp = null;
File.Delete(fileName);
的對象相同的賬戶列表,或者任何集合。集合中所有的IDisposable對象都應該被丟棄。代碼應該是這樣的:
private void EmptySequence (IEnumerable sequence)
{ // throws away all elements in the sequence, if needed disposes them
foreach (object o in sequence)
{
System.IDisposable disposableObject = o as System.IDisposable;
o = null;
if (disposableObject != null)
{
disposableObject.Dispose();
}
}
}
或者,如果你想創建一個IEnumerable擴展功能
public static void DisposeSequence<T>(this IEnumerable<T> source)
{
foreach (IDisposable disposableObject in source.OfType(System.IDisposable))
{
disposableObject.Dispose();
};
}
所有列表/詞典/只讀列表/收藏/等,可以使用這些方法,因爲它們都實現IEnumerable接口。如果不是順序中的所有項都實現System.IDisposable,那麼甚至可以使用它。
您的代碼不包含任何處置操作。 – CodesInChaos
Dispose用於釋放*非託管*資源。 如果列表沒有任何引用,它將在適當的時候由garbabe收集器發佈。 –
@Paolo和一些管理資源的提示清理(某種實現特定種類);但是,非託管更常見 –