ArrayList奇怪问题 原因很简单,struct是结构体,我们都知道结构体是值类型的,而你给的值正好是一样的,所以移除了s2实际就是把s1给移除了。你把struct换成class,看看运行的结果。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 类不会发生这种情况能说具体点不,谢谢(小弟是刚接触C#一段时间)类似于 值类型和引用类型的区别你用class的话,就算数据是一样的,但是对象的引用、内存的引用是不一样的,所以不会发生这种情况。以上是我的一些粗浅的理解,如有错误,请大神们指教。 结构体不能直接调用Move,否则按照值去匹配。 结构体不能直接调用Remove,否则按照值去匹配。 public virtual void Remove(object obj){ int index = this.IndexOf(obj); if (index >= 0) { this.RemoveAt(index); }}这个是Remove内部实现如果你调用的是结果体,那么就会按值的匹配也就是说,你已添加了一个s1,在调用Remove(s2)的时候你会发现,返回的是s1的索引(也就是index=0)然后在看Remove()内部的判断,最终会调用Removeat(index)方法进行移除public virtual void RemoveAt(int index){ if ((index < 0) || (index >= this._size)) { throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index")); } this._size--;//0 if (index < this._size) { Array.Copy(this._items, index + 1, this._items, index, this._size - index); } this._items[this._size] = null;//将第一个this._size-1的项设为null this._version++;} DirectDraw绘了花屏出来... windows server 2003 iis 6 中如何设置 ISAPI 和 CGI 限制 C# MVC3 路径问题 static 变量和非静态变量 如何用中文读出阿拉伯数字? numericupdown控件怎么限制只能输入整数? 不可访问,这是什么原因 winform程序里建SQL2000表的问题? Windows服务频繁调用webservice导致内存溢出,请教高人赐教! 怎么在窗口中插入报表设计器 索引超出的数组限制,List<T>有长度限制? 两个form窗体上dategridview 拖拽
类不会发生这种情况
能说具体点不,谢谢(小弟是刚接触C#一段时间)
类似于 值类型和引用类型的区别
你用class的话,就算数据是一样的,但是对象的引用、内存的引用是不一样的,所以不会发生这种情况。
以上是我的一些粗浅的理解,如有错误,请大神们指教。
{
int index = this.IndexOf(obj);
if (index >= 0)
{
this.RemoveAt(index);
}
}
这个是Remove内部实现
如果你调用的是结果体,那么就会按值的匹配
也就是说,你已添加了一个s1,在调用Remove(s2)的时候你会发现,返回的是s1的索引(也就是index=0)
然后在看Remove()内部的判断,最终会调用Removeat(index)方法进行移除
public virtual void RemoveAt(int index)
{
if ((index < 0) || (index >= this._size))
{
throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index"));
}
this._size--;//0
if (index < this._size)
{
Array.Copy(this._items, index + 1, this._items, index, this._size - index);
}
this._items[this._size] = null;//将第一个this._size-1的项设为null
this._version++;
}