zoukankan      html  css  js  c++  java
  • 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");

    }

    }

    }

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

  • 相关阅读:
    kibana.yml(中文配置详解)
    Elasticsearch之marvel(集群管理、监控)插件安装之后的浏览详解
    ElasticSearch vs Lucene多维度分析对比
    ElasticSearch 应用场景
    ElasticSearch 在Hadoop生态圈的位置
    ElasticSearch 工作原理
    ElasticSearch 架构图
    ElasticSearch vs 关系型数据库
    Codeforces Round #311 (Div. 2)
    uva 568(数学)
  • 原文地址:https://www.cnblogs.com/Antech/p/2300775.html
Copyright © 2011-2022 走看看