private static Queue<Test> queue = new Queue<Test>();
           
            Test obj = new Test();
            lock(queue)
            {
                if (!queue.Contains(obj))
                queue.Enqueue(obj);
            }怎么判断一个完全相同的对象存不存在,存在就不入队。
上面代码无法判断。

解决方案 »

  1.   

    you need to implement the equalty-test for Test class.
      

  2.   

    比较对象的Hashcode,或给对象一个关键字属性
      

  3.   

    Test的Equals方法你重写了吗?  public override bool Equals(object obj)
      {
         //to do
      }
      

  4.   

    任何一个对象,都有它本身能区分是否相同的具体特征,如果要判断两个对象是否相同
    让你的对象继承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); 
                } 
    这个时候你的比较就能相同。
      

  5.   

    class Test
    {
        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();
        }
        //----------------------------------------------------
    }
      

  6.   

    public class Test 

    //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); 
                } 
      

  7.   

    public class Test 

    //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); 
                }