C# Equals()方法报错:NullReferenceException was unhandled
下面是一个C# Equals()方法的例子,执行时报错了
static void Main(string[] args)
{string name = "sandeep";string myName = null;Console.WriteLine("== operator result is {0}", name == myName);Console.WriteLine("Equals method result is {0}", myName.Equals(name));Console.ReadKey();
}
报错信息为:
NullReferenceException was unhandled
Object reference not set to an instance object.

Equals报错:NullReferenceException was unhandled
意思是空引用异常未处理;对象引用没有设置为对象实例。
我们该如何分析其原因呢?这就需要理解一下== 运算符和 Equals() 方法的区别了。
== 运算符和 Equals() 方法都用于比较两个值类型数据项或引用类型数据项。相等运算符 (==) 是比较运算符,Equals() 方法比较字符串的内容。== 运算符比较引用标识,而 Equals() 方法只比较内容。让我们看一些例子。
在下面示例中,我们将一个字符串变量分配给另一个变量。字符串是引用类型,在示例中,一个字符串变量被分配给另一个字符串变量,因此它们在堆中引用相同的标识,并且两者具有相同的内容,因此你可以获得==运算符和Equals()方法的 True 输出。
using System;namespace ComparisionExample
{class Program{static void Main(string[] args){string name = "sandeep";string myName = name;Console.WriteLine("== operator result is {0}", name == myName);Console.WriteLine("Equals method result is {0}", name.Equals(myName));Console.ReadKey();}}
}
现在运行程序,得到如图1.1所示的结果

图1.1 第一个程序的输出
让我们看另一个例子,其中两个对象变量的内容相同,但都有不同的引用。因此 == 运算符返回 false,因为它比较引用标识,而 Equals() 方法返回 true,因为它比较对象的内容。
using System;
namespace ComparisionExample
{class Program{static void Main(string[] args){object name = "sandeep";char[] values = {'s','a','n','d','e','e','p'};object myName = new string(values);Console.WriteLine("== operator result is {0}", name == myName);Console.WriteLine("Equals method result is {0}", myName.Equals(name));Console.ReadKey();}}
}
现在运行程序,得到如图1.2 所示的结果。

图 1.2 程序 2 的输出
现在让我们再回头看文章开头的出错例子,该例子表明当你将空值分配给字符串变量并使用该变量时,Equals() 方法是字符串类的扩展方法,然后 Equals() 方法获得空引用的异常,因此在调用 Equals() 方法时,你必须确保你的变量没有空值。当你的一个变量包含空值时,你应该将该变量用作 Equals() 方法的参数。

图 1.3 空引用异常
经验法则是,对于几乎所有引用类型,当你想要测试相等性而不是引用标识时,请使用 Equals,字符串除外;使用 == 比较字符串确实使事情变得更简单和更易读,但你需要记住运算符的两边必须是字符串类型的表达式才能使比较正常进行。
相关文章:
C# Equals()方法报错:NullReferenceException was unhandled
下面是一个C# Equals()方法的例子,执行时报错了 static void Main(string[] args) {string name "sandeep";string myName null;Console.WriteLine(" operator result is {0}", name myName);Console.WriteLine("Equals method result…...
Linux下C语言调用libcurl库获取天气预报信息
一、概述 当前文章介绍如何在Linux(Ubuntu)下使用C语言调用libcurl库获取天气预报的方法。通过HTTP GET请求访问百度天气API,并解析返回的JSON数据,可以获取指定城市未来7天的天气预报信息。 二、设计思路 【1】使用libcurl库进…...
“深入解析JVM:Java虚拟机原理和内部结构“
标题:深入解析JVM:Java虚拟机原理和内部结构 摘要:本文将深入解析JVM(Java虚拟机)的原理和内部结构。我们将从JVM的基础概念开始,逐步介绍其组成部分,包括类加载器、运行时数据区、字节码解释器…...
Arrays.asList() 返回的list不能add,remove
一.Arrays.asList() 返回的list不能add,remove Arrays.asList()返回的是List,而且是一个定长的List,所以不能转换为ArrayList,只能转换为AbstractList 原因在于asList()方法返回的是某个数组的列表形式,返回的列表只是数组的另一个视图,而数组本身并没…...
命令执行漏洞
1、命令执行漏洞 1.1、简介 Django是用Python开发的一个免费开源的Web结构,几乎包括了Web使用方方面面,能够用于快速建立高性能、文雅的网站,Diango提供了许多网站后台开发常常用到的模块,使开发者可以专注于业务部分。 1.2、漏…...
Hive 中 sort by 和 order by 的区别
文章目录 数据量大小区别作用范围 在 Hive 中, SORT BY 和 ORDER BY 都用于对查询结果进行排序,但它们在实现方式和适用场景上有一些区别。 数据量大小区别 SORT BY: SORT BY 用于在 Hive 中对查询结果进行排序,它的主要特点是在…...
网络资源利用最大化:爬虫带宽优化解决方案
大家好,作为一名专业的爬虫程序员,我们都知道在爬取大量数据的过程中,网络带宽是一个十分宝贵的资源。如果我们不合理地利用网络带宽,可能会导致爬虫任务的效率低下或者不稳定。今天,我将和大家分享一些优化爬虫带宽利…...
STDF - 基于 Svelte 和 Tailwind CSS 打造的移动 web UI 组件库,Svelte 生态里不可多得的优秀项目
Svelte 是一个新兴的前端框架,组件库不多,今天介绍一款 Svelte 移动端的组件库。 关于 STDF STDF 是一个移动端的 UI 组件库,主要用来开发移动端 web 应用。和我之前介绍的很多 Vue 组件库不一样,STDF 是基于近来新晋 js 框架 S…...
C语言一些有趣的冷门知识
文章目录 概要1.访问数组元素的方法运行结果 2.中括号的特殊用法运行结果 3.大括号的特殊用法运行结果 4.sizeof的用法运行结果 5.渐进运算符运行结果 小结 概要 本文章只是介绍一些有趣的C语言知识,纯属娱乐。这里所有的演示代码我是使用的编译器是Visual Studio …...
Oracle数据库审计
1.什么是审计 审计是用来监控和记录用户的数据库操作的 2.审计级别 语句审计权限审计对象审计 3.查看审计功能是否开启: show parameter audit;相关参数: audit_file_destOS中审计信息存放位置audit_sys_operations默认值为FALSE,即不审…...
Node.js新手在哪儿找小项目练手?
前言 可以参考一下下面的nodejs相关的项目,希望对你的学习有所帮助,废话少说,让我们直接进入正题>> 1、 NodeBB Star: 13.3k 一个基于Node.js的现代化社区论坛软件,具有快速、可扩展、易于使用和灵活的特点。它支持多种数…...
全国各城市-货物进出口总额和利用外资-外商直接投资额实际使用额(1999-2020年)
最新数据显示,全国各城市外商直接投资额实际使用额在过去一年中呈现了稳步增长的趋势。这一数据为研究者提供了对中国外商投资活动的全面了解,并对未来投资趋势和政策制定提供了重要参考。 首先,这一数据反映了中国各城市作为外商投资的热门目…...
CentOS 7查看磁盘空间
CentOS如何查看硬盘大小 CentOS是一种基于Linux的操作系统,主要用于服务器端应用。在服务器管理中,硬盘大小是一个非常重要的指标,查看硬盘大小可以帮助系统管理员有效地管理硬盘空间和避免硬盘满了的情况。 方法一:使用df命令 …...
基于PHP的轻量级博客typecho
本文完成于 5 月中旬,发布时未在最新版本上验证; 什么是 typecho ? Typecho 是一款基于 PHP 的博客软件,旨在成为世界上最强大的博客引擎。Typecho 在 GNU 通用公共许可证 2.0 下发布。支持多种数据库,原生支持 Markdo…...
MySQL多表查询
1.创建student和score表 创建score表 2.为student表和score表增加记录 向student表插入记录的INSERT语句如下: 向score表插入记录的INSERT语句如下: 1.查询student表的所有记录 2.查询student表的第2条到4条记录 3.从student表查询所有学生的学号&#…...
消息队列(12) - 定义服务器类
目录 前言设计思想 前言 之前,我们写了通信协议的具体设计,接下来我们设计服务器类 设计思想 我们先只考虑一个虚拟主机的情况下, 在一个虚拟主机的情况下,我们需要有一个session会话来帮助我们存储信息,并且既然是网络通信,那么socket关键字肯定也必不可少,我们在引入一个线…...
做正确的事 VS 正确的做事,哪个更重要?
管理大师彼得德鲁克曾在《有效的主管》一书中简明扼要地指出:“效率是以正确的方式做事,而效能则是做正确的事。效率和效能不应偏废,但这并不意味着效率和效能具有同样的重要性。我们当然希望同时提高效率和效能,但在效率与效能无…...
每日一题——寻找旋转排序数组中的最小值(I)
寻找旋转排序数组中的最小值——I 题目链接 思路 首先我们以数组[1,2,3,4,5,6,7]举个例子,经过旋转后它无非就这两种情况: 情况一:旋转过后数组变成两段有序数列: 情况二:旋转过后数组不变,仍然有序&…...
C语言每日一题:16:数对。
思路一:基本思路 1.x,y均不大于n,就是小于等于n。 2.x%y大于等于k。 3.一般的思路使用双for循环去遍历每一对数。 代码实现: #include <stdio.h> int main() {int n 0;int k 0;//输入scanf("%d%d", &n, &k);int x…...
中科亿海微浮点数转换定点数
引言 浮点数转换定点数是一种常见的数值转换技术,用于将浮点数表示转换为定点数表示。浮点数表示采用指数和尾数的形式,可以表示较大范围的数值,但存在精度有限的问题。而定点数表示则采用固定小数点位置的形式,具有固定的精度和范…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
【iOS】 Block再学习
iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...
