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");

    }

    }

    }

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

  • 相关阅读:
    Flask目录结构
    RHSA-2019:1880-低危: curl 安全和BUG修复更新 及 RHSA-2019:1884-中危: libssh2 安全更新
    ELK+Logback进行业务日志分析查看
    Maven编译过程中出现的问题
    Zabbix监控服务器磁盘I/O
    创建readonly只读用户脚本
    Zabbix监控多个JVM进程
    redis命令
    docker配置Nginx
    docker基本命令
  • 原文地址:https://www.cnblogs.com/Antech/p/2300775.html
Copyright © 2011-2022 走看看