在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
这里讨论的是List<T>的Contains方法,Contains方法默认调用类型T的Equals方法 而Object类的Equals方法支持值类型的比较和引用类型的比较,即如果继承自Object的类是引用类型的(C#中的所有类都继承自Object类),那么该类的Equals就比较是否引用了同一个对象。相反Struct结构体是值类型的,它的Equals方法使用值类型比较。 C#中的String类比较特殊,唯独此类不符合上面的规定。虽然String为引用类型,但比较时使用值类型的比较方法。 string s = new string('d',2); s.Equals(x)的值为true 所以一般情况下C#中可以把string当成是值类型。 有一点需要注意,当Equals进行值类型的比较两个struct结构体时,对于其内部的字段,也会根据字段的类型使用值比较或者引用比较,不会因为是在比较两个结构体而对其中所有的字段都进行值的比较。 举例说明:下面是用到的结构体和类
第一种尝试,结果打印出OK: class Program { static void Main() { B b = new B("3"); A a = new A(); a.x = b; A aa = new A(); aa.x = b; if (a.Equals(aa)) { Console.WriteLine("OK"); } } } 第二种尝试,结果没有打印出任何东西: class Program { static void Main() { A a = new A(); a.x = new B("3"); A aa = new A(); aa.x = new B("3"); if (a.Equals(aa)) { Console.WriteLine("OK"); } } } 转:http://www.cnblogs.com/antech/archive/2011/12/25/2300775.html 这里讨论的是List<T>的Contains方法,Contains方法默认调用类型T的Equals方法 而Object类的Equals方法支持值类型的比较和引用类型的比较,即如果继承自Object的类是引用类型的(C#中的所有类都继承自Object类),那么该类的Equals就比较是否引用了同一个对象。相反Struct结构体是值类型的,它的Equals方法使用值类型比较。 C#中的String类比较特殊,唯独此类不符合上面的规定。虽然String为引用类型,但比较时使用值类型的比较方法。 string s = new string('d',2); s.Equals(x)的值为true 所以一般情况下C#中可以把string当成是值类型。 有一点需要注意,当Equals进行值类型的比较两个struct结构体时,对于其内部的字段,也会根据字段的类型使用值比较或者引用比较,不会因为是在比较两个结构体而对其中所有的字段都进行值的比较。 举例说明:下面是用到的结构体和类
第一种尝试,结果打印出OK: class Program { static void Main() { B b = new B("3"); A a = new A(); a.x = b; A aa = new A(); aa.x = b; if (a.Equals(aa)) { Console.WriteLine("OK"); } } } 第二种尝试,结果没有打印出任何东西: class Program { static void Main() { A a = new A(); a.x = new B("3"); A aa = new A(); aa.x = new B("3"); if (a.Equals(aa)) { Console.WriteLine("OK"); } } } 转:http://www.cnblogs.com/antech/archive/2011/12/25/2300775.html |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论