有没有试过从一个集合里面移除一个对象之后,这个集合仍然留有这个对象?世界之大,无奇不有。稍有疏忽,便会导致这种奇怪的现象。现在让我们看看这个“不死”对象究竟是怎么一回事。
1、“不死”对象现身
这个问题起初是我一个同事提出的,为了重现“不死”对象,现把代码简化如下:
// Code #01
IList products = new List<Product>();
products.Add(GetProduct("1412"));
products.Remove(GetProduct("1412"));
其中 Product 类代码如下:
// Code #02
class Product
{
public Product(string id)
{
m_ID = id;
}
private string m_ID;
public string ID
{
get { return m_ID; }
}
public override string ToString()
{
return "ID: " + m_ID;
}
}
而 GetProduct 方法则根据传入的 ID 从数据库读取数据并返回,它的签名如下:
// Code #03
public static Product GetProduct(string id);
要想知道编号为 1412 的对象是否从 products 中移除,只需在 Code #01 的最后加上这样一行:
// Code #04
Console.WriteLine(products.Count);
时间: 2024-11-05 19:43:06