C#当调用Remove失效时

有没有试过从一个集合里面移除一个对象之后,这个集合仍然留有这个对象?世界之大,无奇不有。稍有疏忽,便会导致这种奇怪的现象。现在让我们看看这个“不死”对象究竟是怎么一回事。

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

C#当调用Remove失效时的相关文章

java中panel实现线程接口以后,要调用repaint函数时,不进run函数

问题描述 java中panel实现线程接口以后,要调用repaint函数时,不进run函数 具体情况是 mypanel类实现了线程接口,在run函数中定义了sleep(100)后调用repaint函数,做一个小坦克游戏,在repaint之前要判断是否击中坦克,击中后要显示三张图片来体现爆炸效果,可是经过调试发现,每次第一次击中的时候,都是直接好多次repaint,没有休眠,后来发现根本就没有进mypanel的run()方法,好像有另一个其他线程再调用paint.这是怎么回事?感谢大家了 pack

spring声明式事务 同一类内方法调用事务失效

只要避开Spring目前的AOP实现上的限制,要么都声明要事务,要么分开成两个类,要么直接在方法里使用编程式事务 [问题]        Spring的声明式事务,我想就不用多介绍了吧,一句话"自从用了Spring AOP啊,事务管理真轻松啊,真轻松:事务管理代码没有了,脑不酸了,手不痛了,一口气全配上了事务:轻量级,测试起来也简单,嘿!".不管从哪个角度看,轻量级声明式事务都是一件解放生产力的大好事.所以,我们"一直用它".         不过,最近的一个项目里

for-关于 += 在被调用函数中时的问题。

问题描述 关于 += 在被调用函数中时的问题. int add(int a){int b = 0: b += 1;}int main (void){int a =0;int i = 0;for(i = 0;i<= 5;i++){printf(""%dn""add(a));}return 0;}如果通过循环调用函数的话, b += 1;怎么进行赋值? 解决方案 使用指针或引用都可以达到要求,一般教科书上会使用指针. void add(int *a){ *a =

解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)

本篇文章是对php中使用异步调用获取数据时出现(由于出现错误c00ce56e而导致此项操作无法完成)的解决方法进行了详细的分析介绍,需要的朋友参考下   [详细错误]:由于出现错误 c00ce56e 而导致此项操作无法完成 [造成原因]:未指定输出编码格式. [解决办法]:句首加入header("content-type:text/html; charset=UTF-8");  

调用java进程时为什么找不到java类

问题描述 调用java进程时为什么找不到java类 您好,请问我在调用java进程时为什么找不到java类? 我用的是myeclipse,执行命令 Process p = run.exec("java cn.com.jit.ida.demo.ratk.InvokeProcess"); 时,发现没有调用InvokeProcess.java类 解决方案 你这没有编译,直接执行的,找不到.class文件.应该先使用javac命令 解决方案二: 你的路径对吗,是否在同一个目录下.

能否在调用jar包时指定jdk版本

问题描述 能否在调用jar包时指定jdk版本 电脑里的jdk是1.6的 最近想用apktool反编译一个apk,但貌似apk只能使用新版apktool 新版apktool需要jdk1.7 不想升级jdk 也不想修改环境变量切换jdk(怕改出问题来),有什么简单切换jdk的方法么 解决方案 不能,建议你使用jdk1.7吧

ndk jni c++ android-Android上利用JNI调用OpenCV函数时出现Fatal signal 11错误

问题描述 Android上利用JNI调用OpenCV函数时出现Fatal signal 11错误 我想在Android上用OpenCV实现人脸识别功能,即事先有一个我提供的人脸训练库,然后检测出人脸后,识别他和训练库中的哪类人最像. 我已在windows平台实现了该功能,并将训练好的FaceRecognizer通过save的方式存储成了xml.我将xml文件放入了Android手机某目录下,然后想利用JNI的方式在Android app中使用OpenCV载入该数据库,但运行到这一行就会报错: F

C语言内存释放与调用子函数时间变长

问题描述 C语言内存释放与调用子函数时间变长 各位大神,你们好: 小弟最近用C语言编程遇到这样一个问题(代码比较多,就不粘了,见谅): 在子函数A中用malloc申请内存,在调用函数A的B函数中释放申请的内存.重复运行100次函数B,发现:在函数B中若不释放A的申请的内存,每次A运行的时间基本一样,而内存占用量持续上升:若在函数B中释放A申请的内存,占用内存问题解决了,然后每次调用A的时间又持续上升. 完全没有搞明白这是个什么情况,你们怎么看? 解决方案 堆上的内存申请和释放一定要一一对应,用完

0-android为什么调用拨号程序时向contact表中存入的数据不全

问题描述 android为什么调用拨号程序时向contact表中存入的数据不全 在模拟器通讯录中新建了联系人,设置了头像,但是这个号码,给模拟器拨打电话时,photoId和 number存到contact表中的值为0和null