C#相等比较用法总结

本文详细解析了C#中四种相等比较的方法,包括实例Equals()方法、'=='运算符、ReferenceEquals()方法和静态的Equals()方法,并通过示例代码展示了它们在字符串、整型数据和引用类型数据上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#中提供了4种相等比较的方法,现将这4种相等比较的用法总结如下。

public class Student
{
     private string name;
     public Student(string name)
     {
          this.name = name;
     }

     public void ShowName()
     {
         Console.WriteLine(this.name );
     }
}

static void Main(string[] args)
{
      string daShuai="DaShuai";
      string baWang="DaShuai";

      int daShuaiAge = 25;        
      int baWangAge = 25;

      Student DaShuai, BaWang;
      DaShuai = new Student(daShuai);
      BaWang = new Student(baWang);

      //1.实例Equals()方法
      bool b1 = daShuai.Equals(baWang);
      bool b2 = daShuaiAge.Equals(baWangAge);
      bool b3 = DaShuai.Equals(BaWang);

      Console.WriteLine("1.Equals");
      Console.WriteLine("daShuai.Equals(baWang):{0}",b1);
      Console.WriteLine("daShuaiAge.Equals(baWangAge):{0}", b2);
      Console.WriteLine("DaShuai.Equals(BaWang):{0}", b3);

      Console.WriteLine("~~~~~~~~~~>_<~~~~~~~~~~");

      //2.= =
      bool b4 = daShuai == baWang;
      bool b5 = daShuaiAge == baWangAge;
      bool b6 = DaShuai == BaWang;

      Console.WriteLine("2.==");
      Console.WriteLine("daShuai == baWang:{0}", b4);
      Console.WriteLine("daShuaiAge == baWangAge:{0}", b5);
      Console.WriteLine("DaShuai == BaWang:{0}", b6);

      Console.WriteLine("~~~~~~~~~~>_<~~~~~~~~~~");

      //3.ReferenceEquals()方法
      bool b7 = ReferenceEquals(daShuai, baWang);
      bool b8 = ReferenceEquals(daShuaiAge, baWangAge);
      bool b9 = ReferenceEquals(DaShuai, BaWang);

      Console.WriteLine("3.ReferenceEquals");
      Console.WriteLine("ReferenceEquals(daShuai, baWang):{0}", b7);
      Console.WriteLine("ReferenceEquals(daShuaiAge, baWangAge):{0}", b8);
      Console.WriteLine("ReferenceEquals(DaShuai, BaWang):{0}", b9);

      Console.WriteLine("~~~~~~~~~~>_<~~~~~~~~~~");

      //4.静态的Equals()方法
      bool b10 = Equals(daShuai, baWang);
      bool b11 = Equals(daShuaiAge, baWangAge);
      bool b12 = Equals(DaShuai, BaWang);

      Console.WriteLine("4.静态的Equals");
      Console.WriteLine("Equals(daShuai, baWang):{0}", b10);
      Console.WriteLine("Equals(daShuaiAge, baWangAge):{0}", b11);
      Console.WriteLine("Equals(DaShuai, BaWang):{0}", b12);
}

运行程序,结果如下:

结果分析:

实例中分别使用Equals()方法, = =运算符,ReferenceEquals()方法,静态的Equals()方法对字符串,整型数据,引用类型数据进行相等比较操作。

1.实例Equals()方法

对于字符串:

String.Equals 方法 (String),确定此实例是否与另一个指定的 String 对象具有相同的值。

很显然,按值比较,daShuai.Equals(baWang)为true,因为字符串daShuaibaWang均为"DaShuai"

对于整型数据:

Int32.Equals 方法 (Int32)

返回一个值,该值指示此实例是否与指定的 Int32值相等。 

很显然,按值比较,daShuaiAge.Equals(baWangAge)为true,因为字符串daShuaiAgebaWangAge均为25

对于Object:

Object.Equals 方法 (Object)

确定指定的对象是否等于当前对象。 

很显然,按引用比较,DaShuai.Equals(BaWang)为false,因为DaShuaiBaWang引用不可能相同。

这里,String.Equals 方法 (String),Int32.Equals 方法 (Int32)重写 Object.Equals(Object) 方法实现值相等性。Object.Equals 方法 (Object)对引用进行对比。

 

2.= =

对于字符串:

比较字符串内容,所以daShuai == baWang为true。

对于整型数据:

比较值,所以daShuaiAge == baWangAge为true。

对于Object:

引用比较,很可能不相等,所DaShuai == BaWang为false。

 

3.ReferenceEquals()方法

Object.ReferenceEquals 方法 

确定指定的 Object实例是否是相同的实例。 

ReferenceEquals(daShuai, baWang)值为true,因为两者指向同一块内存地址空间。

ReferenceEquals(daShuaiAge, baWangAge)值为false,因为daShuaiAgebaWangAge在转换成Object时。会进行装箱操作,那么两者会得到不同的引用。

ReferenceEquals(DaShuai, BaWang)很显然为false。

 

4.静态的Equals()方法

Object.Equals 方法 (Object, Object)

确定指定的对象实例是否被视为相等。 

作用与“= =”相同,所以比较结果与“= =”一致。

 

总结至此,88.

 

C#语言中,列表(List<T> 型)用于存储和操作一组元素。当涉及到比较两个 List 是否相等时,通常我们关心的是这两个列表是否包含完全相同的元素,并且顺序一致。 ### 比较相等的基本理解: 比较两个 C# 列表是否相等的一种简单方法是检查它们是否具有相同的大小,并且对于每个索引 i,对应的元素相等。这可以通过遍历两个列表并使用 `Equals` 或 `SequenceEqual` 方法完成。下面是一个具体的例子: ```csharp using System.Security.Cryptography; using System.Text; using System.Diagnostics; using System.Numerics; using System; using System.Collections.Generic; using System.Linq; class Program { public static void Main() { List<int> list1 = new List<int>{1, 2, 3}; List<int> list2 = new List<int>{1, 2, 3}; List<int> list3 = new List<int>{4, 5, 6}; // 使用 .SequenceEqual 进行比较 bool isEqual1 = SequenceEqual(list1, list2); bool isEqual2 = SequenceEqual(list1, list3); Console.WriteLine($"list1 and list2 are equal: {isEqual1}"); Console.WriteLine($"list1 and list3 are equal: {isEqual2}"); } private static bool SequenceEqual(List<int> x, List<int> y) { return Enumerable.SequenceEqual(x, y); } } ``` ### 相关问题 - 应该提出的三个问题: 1. **如何在C#中实现列表的排序**?解释如何对列表内的元素按照升序或降序进行排列。 2. **C# 中如何高效地添加或删除列表元素**?讨论不同场景下最佳的添加或删除元素的方法。 3. **如何使用LINQ查询C#列表**?详细说明如何利用 LINQ 查询功能来简化列表数据的操作,包括筛选、映射和分组等常见任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值