类似代码(模拟):
EventHandler<PointStateChangedEventArgs> h = me_opend2;
System.ComponentModel.EventHandlerList es = new System.ComponentModel.EventHandlerList();
es.AddHandler(1, h);
Console.WriteLine(es[1].ToString()); //es[1] null
//正确
EventHandler<PointStateChangedEventArgs> h = me_opend2;
System.ComponentModel.EventHandlerList es = new System.ComponentModel.EventHandlerList();
es.AddHandler("1", h);
Console.WriteLine(es["1"].ToString());
其实定义很多事件造成所谓内存浪费我并不在乎,使用 EventHandlerList 是因为有几个类要定义一组同样的事件,只是不想复制代码。msdn示例用 object 做键,我按习惯定义了 enum,结果不行,转 int 也不行,最后转 string 就过了。
原因:没找到资料,看到的介绍 索引器、hashtable 的文章,都没有搜索 object 键时是否用 hashcode 条件。int 不论是 int.gethashcode 还是 object.gethashcode 都是一个值。