C# Equals()方法报错:NullReferenceException was unhandled

news2024/9/22 15:27:44

下面是一个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报错: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 第一个程序的输出


图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 的输出

 
图 1.2 程序 2 的输出

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

图 1.3 空引用异常

 
图 1.3 空引用异常

经验法则是,对于几乎所有引用类型,当你想要测试相等性而不是引用标识时,请使用 Equals,字符串除外;使用 == 比较字符串确实使事情变得更简单和更易读,但你需要记住运算符的两边必须是字符串类型的表达式才能使比较正常进行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/855469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中通快递:短期财务前景良好,长期财务业绩将遭受严重打击

来源:猛兽财经 作者:猛兽财经 华尔街分析师对中通快递的短期财务前景预测 华尔街分析师目前预测中通快递(ZTO)将在2023财年全年产生一份相当不错的财务业绩。 根据S&P Capital IQ的数据,在过去的6个月里&#xff…

代码随想录算法训练营第24天| 第七章 回溯算法part01 理论基础、leetcode 77

Part I : 回溯算法基础 背景:一直以来都是半懂不懂的,在逻辑上不难,毕竟属于暴力搜索;在代码上就开始缠绕起来了,自己研究的时候对N皇后问题老是理不清。这次终于在Carl这开始前进啦!何为回溯算法&#xf…

【C++】STL——set/multiset 和 map/multimap的使用

文章目录 1. 关联式容器2. 树形结构的关联式容器3. set3.1 认识set3.1 set的使用 4. multiset5. map5.1 认识map5.2 pair5.3 map的使用对map中[]的理解 6. multimap 1. 关联式容器 在初阶阶段,我们已经接触过STL中的部分容器 比如:vector、list、deque、…

VoxWeekly|The Sandbox 生态周报|20230807

欢迎来到由 The Sandbox 发布的《VoxWeekly》。我们会在每周发布,对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容,欢迎与朋友和家人分享。请订阅我们的 Medium 、关注我们的 Twitter,并加入 Discord 社区&#xf…

c++--AVL树简单实现

1.什么是AVL树 AVL树就是在搜索二叉树的基础上通过控制左右子树的高度差实现的,在搜索二叉树的基础上,通过旋转来控制,是左右子树高度差的绝对值严格控制为不超过1(通过旋转来控制树的高度)。由于搜索二叉树的效率最差…

一起学SF框架系列7.1-spring-AOP-基础知识

AOP(Aspect-oriented Programming-面向切面编程)是一种编程模式,是对OOP(Object-oriented Programming-面向对象编程)一种有益补充。在OOP中,万事万物都是独立的对象,对象相互耦合关系是基于业务进行的;但在…

【逗老师的PMP学习笔记】8、项目质量管理

目录 一、规划质量管理1、质量管理的发展历史2、戴明环,PDCA理论3、【关键输入】事业环境因素4、【关键输入】成本效益分析5、【关键工具】质量成本6、【关键输出】质量管理计划7、插一嘴,项目的三个标准8、【关键工具】质量测量指标 二、管理质量1、【关…

[OnWork.Tools]系列 06-屏幕水印

简介 屏幕水印功能主要是在开会分享屏幕的时候在屏幕上增加水印 水印使用 水印启用和颜色设置 水印文字和大小设置 水印间距,透明度,角度调整

保护电脑健康,这些维护技巧你Get了吗?

文章目录 1.界面环境1.1合理布置终端桌面1.2清理垃圾信息1.3关注运行环境和系统信息 2.程序管理2.1安装软件时需谨慎2.2及时更新软件和操作系统2.3合理管理插件和工具栏 3.网络防护3.1保护个人隐私3.2防范网络攻击3.3备份重要数据 4.电源管理4.1合理关机和电源设置4.2定期清理灰…

ESP32开发阶段启用 Secure Boot 与 Flash encryption

Secure Boot 与 Flash encryption详情 请参考:https://blog.csdn.net/espressif/article/details/79362094 1、开发环境 AT版本:2.4.0.0 发布IDF 与 python: idf4.3_py3.10_env系统:虚拟机 ubuntu 20 2、使能 secure boot 和 …

手搓 自然语言模型 LLM 拆分em结构设计 网络参数对比

数据 数据集 新的em编码参数表 voc_sizehidden_sizetotaltotal Bmax_lensecondsdays65536512374865920.03749B10242560.2655361024828375040.08284B20485120.5655362048<

yo!这里是STL::list类简单模拟实现

目录 前言 重要接口实现 框架 默认成员函数 迭代器&#xff08;重点&#xff09; 1.引言 2.list迭代器类实现 3.list类中调用实现 增删查改 后记 前言 我们知道&#xff0c;stl中的vector对应数据结构中的顺序表&#xff0c;string类对应字符串&#xff0c;而今天要…

Spring Data学习笔记Day01-SpringData入门

Spring Data基本介绍 目录 Spring Data Redis 官方API参考手册&#xff01;★ Spring Data的价值★ Spring Data及其子项目★ 强大的Spring Data★ Repository接口★ 具体Repository接口★ Spring Data JPA开发★ Spring Boot如何选择DataSource★ 数据源相关配置★ 配置第三方…

spring源码高级-图灵周瑜

实现factorybean可以产生代理对象

文件数字水印,附一种纯文本隐写术数字水印方法

数字水印&#xff08;Digital Watermark&#xff09;是一种在数字媒体文件中嵌入隐藏信息的技术。这些数字媒体可以是图片、音频、视频或文本等。数字水印不会对原始文件造成明显的视觉或听觉变化&#xff0c;但可以在一定程度上保护知识产权&#xff0c;追踪数据来源&#xff…

4个不是镜像但生成质量不输ChatGPT的其他AI聊天机器人

最近又发现其他几个类似ChatGPT的好用且质量还不错的AI聊天机器人&#xff0c;特意分享给大家。 Bing AI Bing AI工作原理与OpenAI的ChatGPT非常相似。Bing AI聊天机器人是利用ChatGPT的大语言模型&#xff0c;能够生成不同形式的内容&#xff0c;例如博客、文章、描述、诗歌等…

尚硅谷大数据项目《在线教育之采集系统》笔记004

视频地址&#xff1a;尚硅谷大数据项目《在线教育之采集系统》_哔哩哔哩_bilibili 目录 P047 P048 P049 P050 P051 P052 P053 P054 P055 P056 P047 /opt/module/datax/job/base_province.json [atguigunode001 ~]$ hadoop fs -mkdir /base_province/2022-02-22 [atgu…

动手学深度学习Pytorch 4.4练习

1.这个多项式回归问题可以准确地解出吗&#xff1f;提⽰&#xff1a;使⽤线性代数。 可以,把多项式问题&#xff0c;用matlab的str2sym表示出来&#xff0c;再用solve求解。 2.考虑多项式的模型选择。 1. 绘制训练损失与模型复杂度&#xff08;多项式的阶数&#xff09;的关系…

以太网收发及TSN概述

一、概述 TSN&#xff08;Time-Sensitive Networking&#xff09;时间敏感网络&#xff0c;即在非确定性的以太网中实现确定性的最小时间延时的协议族&#xff0c;是IEEE 802.1工作组中的TSN工作组开发的一套协议标准&#xff0c;定义了以太网数据传输的时间敏感机制&#xff…

探析青少年口才训练在个人发展中的重要性与影响

论文题目&#xff1a;探析青少年口才训练在个人发展中的重要性与影响 摘要&#xff1a; 本论文旨在探讨青少年口才训练对个人发展的重要性和影响。通过对相关文献的综述和实证研究的分析&#xff0c;论文将阐述口才训练对青少年自信心、表达能力和思维能力的提升&#xff0c;以…