C#中的Equals()和Contains()

这里讨论的是List<T>的Contains方法,Contains方法默认调用类型T的Equals方法

而Object类的Equals方法支持值类型的比较和引用类型的比较,即如果继承自Object的类是引用类型的(C#中的所有类都继承自Object类),那么该类的Equals就比较是否引用了同一个对象。相反Struct结构体是值类型的,它的Equals方法使用值类型比较。

C#中的String类比较特殊,唯独此类不符合上面的规定。虽然String为引用类型,但比较时使用值类型的比较方法。

string s = new string('d',2);
string x = "dd";

s.Equals(x)的值为true

所以一般情况下C#中可以把string当成是值类型。

有一点需要注意,当Equals进行值类型的比较两个struct结构体时,对于其内部的字段,也会根据字段的类型使用值比较或者引用比较,不会因为是在比较两个结构体而对其中所有的字段都进行值的比较。

 举例说明:下面是用到的结构体和类

struct A
    {
        public B x;
    }
    class B
    {
        string str;
        public B(string str)
        {
            this.str = str;
        }
    }

第一种尝试,结果打印出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");

}

}

}

 

若有说的不恰当的地方,请不吝赐教。

转载于:https://www.cnblogs.com/Antech/archive/2011/12/25/2300775.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值