首页 > 编程语言 >.NET(C#) 对象判等

.NET(C#) 对象判等

时间:2023-12-05 22:33:29浏览次数:33  
标签:相等 判等 C# Object 对象 实例 类型 NET ReferenceEquals

值类型变量判断就是比较值是否相等,而引用类型的对象判断是否相等,一般是判断指定的对象是否是相同的实例。也就是比较对象引用的值,但是也有可能有特殊情况,虽然不是相同的实例,但在业务上可能是相等的。就要结合具体的情况判断是否相等了。一般判断对象是否相等的方法有4种。

1、Object.ReferenceEquals(static):确定指定的 Object 实例是否是相同的实例,值得注意的是使用Object.ReferenceEquals对值类型变量进行判等,'Object.ReferenceEquals‘ 总是返回False。ReferenceEqual的方法签名及方法体.

通过代码可以看出,代码中还是调用Operator==,那我们一般调用Operator==是可以判断值类型量否相等的,相信大家都会有这个疑问,那是因为方法参数是object类型,传入值类型参数,会装箱成object类型,对象就不是相同的实例,这样就会总是返回False了,

2、Object.Equals(static):确定指定的对象是否等于当前对象,这个方法不仅可以判断引用类型,也可以判断值类型是否相等。

3、Operator操作符(==):默认情况下,Operator==在对引用类型对象判等的本质和Object.ReferenceEquals是相同的即确定指定的变量是否是相同的实例。Object.ReferenceEquals和Object.Equals也用了双等号。判断值类型就是比较值是否相等。我们也可以重写Operator==。

需要注意的是,运算符 == 的重写中的常见错误是,重写的方法内还使用 (a == b)、(a == null) 或 (b == null) 来检查引用相等性。这会调用重载的运算符 ==,从而导致无限循环。应使用 ReferenceEquals 或将类型强制转换为 Object 来避免无限循环。

4、Instance.Equals:实例对象的Equals方法,这个其实和第二种Object.Equals(static)是差不多,只是参数只有一个,但是这个方法是在class内部继承Object的,是可以进行重写的。CLR会要求所有的类型都派生自Object,每个class内部都可以重写这个方法。

详细介绍及示例代码:.NET(C#) 对象判等

标签:相等,判等,C#,Object,对象,实例,类型,NET,ReferenceEquals
From: https://www.cnblogs.com/tinyblog/p/17878474.html

相关文章

  • 无涯教程-Erlang - copy函数
    此方法用于复制现有文件。copy-语法copy(source,destination)source     - 需要复制的源文件的名称。destination -文件的目标路径和名称。copy-示例-module(helloworld).-export([start/0]).start()->file:copy("Newfile.txt","Duplicate.......
  • elasticsearch聚合查询实践
    目录概念聚合分类聚合语法聚合作用范围及排序聚合原理及terms精准度聚合实验桶聚合指标聚合Pipeline聚合实践一:多商户数据权限聚合分页实践二:多维度嵌套聚合实践三:删除ES索引重复数据附:实验环境概念用于聚合的字段必须是exactvalue,即doc_value=true。分词字段不可进行聚......
  • ABC325G offence 题解
    给出一个长为\(n\)的字符串和非负整数\(k\)。你可以进行以下操作若干次,使得最终字符串长度最小。选择一个字串of。然后删掉of以及这之后的\(i\)个字符。\(i\)由你决定,但要满足\(0\leqi\leqk\)。输出这个最小长度。\(1\leqn,k\leq300\)。做完以后感觉很简单。但......
  • AtomicArray
    AtomicIntegerai=newAtomicInteger(1);//1.获取值System.out.println("ai.get="+ai.get());//2.增加指定值并获取System.out.println("ai.addAndGet(2)="+ai.addAndGet(2));System.out.println("ai.get="+ai.get());//3.比较并设置1.预期值2.......
  • 5.Websocket实现消息推送
    项目需要一个在线协同办公功能来进行消息实时推送,我采用SpringBoot结合Websocket来实现该功能。Websocket采用全双工通信方式,可以在客户端和服务端之间建立持久的连接,实现实时的双向通信。相对于传统的HTTP请求,WebSocket具有以下优势:实时性:Websocket提供实时的双向通信能力......
  • 每天5分钟复习OpenStack(十二)Ceph FileStore 和 BlueSotre
    一个最小化的Ceph集群需要三个组件MONMGROSD.上一章我们部署了MON,本章节我们完成剩下MGR和OSD的部署。在文末我们将重点介绍下什么是FileStore和BlueStore,并详细分析其特点,来说明为什么Ceph社区放弃了FileStore,直接采用了BlueStore.1、MGR部署创建mgr工作目录sudo-u......
  • 刷题 字典树 LCP(最长公共前缀)
    2023.12.5cf1902E字典树的功能根据字典树的概念,我们可以发现:字典树的本质是把很多字符串拆成单个字符的形式,以树的方式存储起来。所以我们说字典树维护的是”字典“。那么根据这个最基本的性质,我们可以由此延伸出字典树的很多妙用。简单总结起来大体如下:1、维护字符串集合(即......
  • 第一单元 Mvc概述
    1.什么是Mvc模型-视图-控制器(MVC)体系结构模式将应用程序分成3个主要组件组:视图模型、视图和控制器。此模式有助于实现关注点分离。使用此模式,用户请求被路由到控制器,后者负责使用模型来执行用户操作和/或检索查询结果。控制器选择要显示给用户的视图,并为其提供所需的......
  • 【Python】【OpenCV】绘制外接矩形和外接圆
     外接矩形、外接圆:1importcv22importnumpy34img=cv2.imread('../img/img.png',-1)5ret,thresh=cv2.threshold(img,127,255,cv2.THRESH_BINARY)6contours,hier=cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)7......
  • C1. Good Subarrays (Easy Version)
    思路:我们枚举每一个左端点,对于每一个左端点,寻找最长的满足条件的区间,这个区间长度就是左端点对答案的贡献,可以发现具有单调性,右端点只会前进不会倒退。所以我们两个指针各扫一遍区间就可以。#include<bits/stdc++.h>#definelsp<<1#definersp<<1|1#definePIIpair<int,......