前言

在C# 进行开发中,检查参数值是否为null大家都用什么?本文介绍除了传统的方式==运算符,还有一种可以商用is关键字。

C# 7.0 中 is 关键字的使用

传统的方式是使用==运算符:

if(person == null) { }

从 C# 7 开始,可以使用is关键字进行空检查:

if(person is null) { }

1、is关键字有一个很大的优势,它会忽略在要检查的实例的类上定义的任何运算符重载。

2、当使用==运算符时,该运算符可能会被重载,并且会得到意想不到的结果。

示例

  1、is关键字

我们来看一个简单的例子,创建一个.NET 控制台应用程序,在Main 方法中编写如下所示代码。

首先声明了一个person类型的变量Person,并且赋值null, 然后将person == null和结果person is null写入控制台。

static void Main(string[] args)
{
Person person = null;
​
Console.WriteLine("Is Person null?");
​
Console.WriteLine($"== says: {person == null}");
​
Console.WriteLine($"is says: {person is null}");
}
public class Person
{
...
}

可以猜猜,上面代码的运行结果会是什么?

大家可能认为控制台会输出下面结果:

Is Person null?
== says: True
is says: True

实际上,可以从上面的代码中肯定地说, person is null肯定会返回true,因为person变量实际上是null。

但是 person == null 返回 true或false,是不确定的,因为 Person类没有定义任何的内容。如果Person类重载了==操作符,它就可以为所欲为。

  2、重载==运算符

现在我们再来创建一个Person类像下面这样的,如下所示,重载了==运算符,并且只返回 false:

public class Person
{
public static bool operator ==(Person x, Person y)
{
return false;
}
public static bool operator !=(Person x, Person y)
{
return !(x == y);
}
public override bool Equals(object obj)
{
return base.Equals(obj);
}
}

现在运行控制台应用程序时,可以看到下面的输出结果:

Is Person null?
== says: False
is says: True

  is关键字运行的结果是正确的,因为person变量实际上是null,但是重载过的的操作符返回的结果可能就不同。

总结

因此在代码中我们可以进行明智的选择,如果想要进行null的判断,is关键字就是最好的选择。你一旦使用习惯了,它在代码中看起来是比较清晰简洁。

原文:https://www.thomasclaudiushuber.com
  作者:Thomas Claudius Huber

优秀是一种习惯,欢迎大家关注学习 

C# 为什么你应该更喜欢 is 关键字而不是 == 运算符的更多相关文章

  1. 为什么更喜欢Outlook,而不是Gmail

    让我写这篇博客主要前段时间dudu写了一篇关于Google Gmail年龄限制问题,导致博客园管理员Gmail账号会被删除,里面的邮件无法迁移出来.围观地址:http://www.cnblogs.co ...

  2. Linq表达式、Lambda表达式你更喜欢哪个?

    什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...

  3. 【转】Linq表达式、Lambda表达式你更喜欢哪个?

    [转]Linq表达式.Lambda表达式你更喜欢哪个? 什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相 ...

  4. haskell,lisp,erlang你们更喜欢哪个?

    haskell,lisp,erlang你们更喜欢哪个? haskell,lisp,erlang你们更喜欢哪个?

  5. 【转载】javascript 杂谈之哪种写法你更喜欢?

    转载自:http://www.cnblogs.com/baochuan/archive/2012/04/30/2473771.html 思维导图  介绍   老是在写js,你平时是怎么写你的js呢?更 ...

  6. 六种流行的语言大餐---C、C++、python、Java、php、C#你更喜欢哪一个呢?

    引言 鉴于五一期间超大的人流量,LZ思来想去,最终还是选择蜗居在自己的出租屋.无聊之际,当然不能忘了做点什么事情,于是LZ就研究了一下几种语言的皮毛,在这里献丑一翻,希望各位猿友莫要见笑. 不过说来也 ...

  7. 缓存策略 半自动化就是mybaitis只支持数据库查出的数据映射到pojo类上,而实体到数据库的映射需要自己编写sql语句实现,相较于hibernate这种完全自动化的框架我更喜欢mybatis

    springboot入门(三)-- springboot集成mybatis及mybatis generator工具使用 - FoolFox - CSDN博客 https://blog.csdn.net ...

  8. robot framework设置更高级别的关键字

    robot framework中除了内置的关键字,以及低级别的用户自定义关键字外,为了使用例更加整洁,我们还可以形成更高级别的关键字 方法如下: 在Keywords里面设置 其中Run Success ...

  9. springboot 使用maven 打包 报 (请使用 -source 7 或更高版本以启用 diamond 运算符) 错误解决办法

    在使用springboot maven 打包时 报如下错误 (请使用 -source 7 或更高版本以启用 diamond 运算符) pom.xml编译插件 配置如下: <plugin> ...

随机推荐

  1. js实现页面下拉,区块(文字,图片等)左右淡入淡出效果

    html: <div class="box"> <span class="historybox"> </span> < ...

  2. Java程序设计(2021春)——第一章续笔记与思考

    Java程序设计(2021春)--第一章续笔记与思考 目录 Java程序设计(2021春)--第一章续笔记与思考 Java数据类型 基本数据类型 引用类型 基本数据类型--整数类型的细节 基本数据类型 ...

  3. Spring:Spring项目多接口实现类报错找不到指定类

    spring可以通过applicationContext.xml进行配置接口实现类 applicationContext.xml中可以添加如下配置: 在application.properties中添 ...

  4. Spring Boot中文文档(官方文档翻译 基于1.5.2.RELEASE)

    作者:Phillip Webb, Dave Syer, Josh Long, Stéphane Nicoll, Rob Winch, Andy Wilkinson, Marcel Overdijk, ...

  5. linux--------find命令之xargs

    p.p1 { margin: 0; font: 18px "Hannotate SC"; color: rgba(4, 51, 255, 1); -webkit-text-stro ...

  6. WPF技巧:通过代码片段管理器编写自己常用的代码模板提示效率

    在写自定义控件的时候,有一部分功能是当内部的值发生变化时,需要通知控件的使用者,而当我在写依赖项属性的时候,我可以通过popdp对应的代码模板来完成对应的代码,但是当我来写属性更改回调的时候,却发现没 ...

  7. fasthttp:比net/http快十倍的Go框架(server 篇)

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/574 我们在上一篇文章中讲解了 Go HTTP 标准库的实现原理,这 ...

  8. vue(18)路由懒加载

    什么是路由懒加载 官方的解释: 当打包构建应用时,JavaScript 包会变得非常大,影响页面加载. 如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更 ...

  9. C语言:缓冲区

    缓冲区(Buffer)又称为缓存(Cache),是内存空间的一部分.也就是说,计算机在内存中预留了一定的存储空间,用来暂时保存输入或输出的数据,这部分预留的空间就叫做缓冲区(缓存).有时候,从键盘输入 ...

  10. vs2013恢复默认设置

    选择 工具->import or export settings(工具->导入导出设置),选择最下面一项即可