private static Queue<Test> queue = new Queue<Test>();
Test obj = new Test();
lock(queue)
{
if (!queue.Contains(obj))
queue.Enqueue(obj);
}怎么判断一个完全相同的对象存不存在,存在就不入队。
上面代码无法判断。
Test obj = new Test();
lock(queue)
{
if (!queue.Contains(obj))
queue.Enqueue(obj);
}怎么判断一个完全相同的对象存不存在,存在就不入队。
上面代码无法判断。
{
//to do
}
让你的对象继承IComparable接口,实现具体的比较方法就可以了默认对象的对象比较是去比较hashcode的,
所以你也可以重载它的GetHashCode()方法,返回一个具有实际意义的code
举个例子
public class Test
{
//name是能唯一区分A对象的属性
public Name;public override GetHashCode()
{
return Name.GetHashCode();
}}private static Queue <Test> queue = new Queue <Test>();
Test obj = new Test();
lock(queue)
{
if (!queue.Contains(obj))
queue.Enqueue(obj);
}
这个时候你的比较就能相同。
{
private int i;
public Test(int i)
{
this.i = i;
}
//----------------------------------------------------
public override bool Equals(object obj)
{
Test other = obj as Test;
if (other != null)
{
return other.i == this.i;
}
return false;
}
public override int GetHashCode()
{
return i.GetHashCode();
}
//----------------------------------------------------
}
{
//name是能唯一区分A对象的属性
public Name; public override Equal(object obj)
{
if(obj = null)
{
return false;
}
return obj.GetHashCode().Equal(this.GetHashCode());
}
public override GetHashCode()
{
return Name.GetHashCode();
} } private static Queue <Test> queue = new Queue <Test>();
Test obj = new Test();
lock(queue)
{
if (!queue.Contains(obj))
queue.Enqueue(obj);
}
{
//name是能唯一区分A对象的属性
public Name; public override Equal(object obj)
{
if(obj = null || !(obj is Test))
{
return false;
}
return obj.GetHashCode().Equal(this.GetHashCode());
}
public int override GetHashCode()
{
if(string.IsNullOrEmpty(Name))
{
return 0;
}
return Name.GetHashCode();
} } private static Queue <Test> queue = new Queue <Test>();
Test obj = new Test();
lock(queue)
{
if (!queue.Contains(obj))
queue.Enqueue(obj);
}