【发布时间】:2013-11-26 17:05:42
【问题描述】:
我有一个类可以像这样实现 IDisposable
public class SomeClass : IDisposable
{
private IList<string> _someList = new List<string>();
public IList<string> SomeList
{
get { return _someList; }
}
public void Dispose()
{
_someList = null;
}
}
还有一个方法使用'using'块来创建这个类的两个实例并将它添加到这样的集合中
private static void Main(string[] args)
{
IList<SomeClass> classes = new List<SomeClass>();
using (var sc = new SomeClass())
{
sc.SomeList.Add("a");
classes.Add(sc);
}
using (var sc = new SomeClass())
{
sc.SomeList.Add("b");
classes.Add(sc);
}
foreach (var a in classes)
{
Console.WriteLine(a.SomeList[0]);
}
Console.ReadLine();
}
当我来到 foreach 遍历“类”中的元素时,我的两个对象的“SomeList”属性都为空。
我确实明白,由于每个 using 都执行 Dispose() 并且在 dispose 中,我将这两个列表设为空,因此它们将为空。
我的问题是如何在我的 dispose() 中停止将“SomeList”置空。
谢谢
--更新 1
更接近真实代码的东西
base.OnPreRender(e);
Page page = HttpContext.Current.CurrentHandler as Page;
HtmlHead head = (HtmlHead)page.Header;
if (Settings.AreSet)
{
using (var noIndex = new HtmlMeta())
{
noIndex.Name = "somename";
noIndex.Content = "somecontent";
head.Controls.AddAt(0, noIndex);
}
}
using (var machineName = new HtmlMeta())
{
machineName.Name = "somename2";
machineName.Content = "somecontent2";
head.Controls.AddAt(1, machineName);
}
UpdateHeader(head);
--更新#2 上述类的变体现在具有字符串属性,而不是列表。
public class SomeClass2 : IDisposable
{
public string SomeString { get; set; }
public void Dispose()
{
SomeString = string.Empty;
}
}
对于下面的方法,它仍然做同样的事情。我的“类”包含“SomeClass2”列表,其中“SomeString”为空(我在 dispose() 中设置的内容)
IList<SomeClass2> classes = new List<SomeClass2>();
using (var sc = new SomeClass2())
{
sc.SomeString = "a";
classes.Add(sc);
}
using (var sc = new SomeClass2())
{
sc.SomeString = "a";
classes.Add(sc);
}
foreach (var a in classes)
{
Console.WriteLine(a.SomeString);
}
Console.ReadLine();
【问题讨论】:
-
我的问题是,您为什么要将
Dispose中的列表清空?这不是Dispose的用途。
标签: c# collections dispose idisposable using