太坑了,要放在同一块内存才算contains吗? 不在同一块内存是不是要一个个字段来比较了........?..............

解决方案 »

  1.   

    StudentOldList.Contains(item)
    =>
    StudentOldList.Any(x => x.Name == item.Name && x.Id == item.Id && x.Ex == item.Ex)
      

  2.   

    因为List中每项都是引用类型,所以是否含有某个子项,是看他们是否指向相同的地址。
      

  3.   


    StudentResult sr1 = new StudentResult("张三", "100", "男");
    StudentResult sr2 = new StudentResult("张三", "100", "男");你觉得这两个相等?那麻烦你重写Equals和GetHashCode方法告诉运行时它俩相等。
      

  4.   

    4楼已经说到重点上了,楼主要补补了List<T> 如果T是值类型,你这样做是没问题
      

  5.   

    List<T> 的contains方法比较的是T的Equals方法,楼主需要重写Equals及GetHashCode方法,详见http://bbs.csdn.net/topics/390617586
      

  6.   

       这就是引用类型与值类型的区别,你不能说两个同名的人是相等的,但可以说两个人的名字是相等,若要同名的人都相等除非告诉它(重写Equals及GetHashCode方法)或者搜索时只按名称,string也是引用类型,但是重写了Equals及GetHashCode方法,所以字符窜相同的string也是相等的,可使用 == 运算符是因为 C# 支持运算符重载,可让 == 与 Equals 具有同等的作用。而如果是 Java 的 string 是不可以用 == 运算符的,只能使用Equals进行比较。
       本人首次使用 Java 时,由于没有详看相关说明,还以为 string 与 C#一样可以用 == 运算符,在测试时才发现除了值类型以外引用类型不能使用一些运算符。
      

  7.   

    new 一次就是一个新的对象啊,老大,你对象有ID,ID应该是唯一值,你还不如弄成字典 Dictionary<string,studnet>,然后通过Key来判断是否存在。。