首页 > 编程语言 >在C#语言里对NULL的技术处理

在C#语言里对NULL的技术处理

时间:2023-10-16 14:22:28浏览次数:31  
标签:null 语言 C# Unknown 运算符 操作符 NULL string name

在 C# 中,null 是一个特殊存在,表示缺少值。Null 可以分配给引用类型和可为 null 的值类型,但不能分配给不可为空的值类型。在 C# 中处理 null 值是编写可靠且可靠的代码的一个重要方面。在本文中,我将讨论一些在 C# 中处理 null 值的最常用技术。

1 、NULL合并操作符(??)

null合并操作符(??)是一个简写操作符,用于在左侧对象不为null时返回左侧值,在左侧对象为null时返回右侧值。当您在判断当前对象值是否null值并且赋值新对象需要简写时,此操作符非常有用。

string name = null;
string result = name ?? "Unknown";
Console.WriteLine(result); // Output: Unknown

在上面的示例中,由于name的值为null,因此使用null合并运算符将“Unknown”的值赋给result。

2. 条件运算符 (?:)

条件运算符(?:)是一个三元运算符,用于代替if-else的简写,如果条件为真则返回一个值,如果条件为假则返回另一个值。当需要根据条件提供默认值时,此操作符很有用。

string name = null;
string result = (name != null) ? name : "Unknown";
Console.WriteLine(result); // Output: Unknown

在上面的例子中,由于name的值为null,因此使用条件运算符将“Unknown”的值赋给result。

3. 空条件运算符(?.)

如果对象不为空,则使用空条件操作符(?.)访问对象的成员,否则返回空。当您需要访问可能为空的对象的属性或方法时,此操作符非常有用。

string name = null;
int? length = name?.Length;
Console.WriteLine(length); // Output: null

在上面的例子中,因为name的值是空的,所以length的值也是空的。

但你也可以利用 合并操作运算符(??) 进行进阶的写法,代码如下:

string name = null;
int length = name?.Length??0;
Console.WriteLine(length); // Output: 0

可以看到上面的代码例子里,length可以不用空的值类型获取name的长度,可以在你的业务逻辑里认为null的字符串长度也可以是0长度,减少后期值类型的复杂判断。

4. 空合并赋值操作符 (??=)

空合并赋值操作符(??=)用于在左侧对象为空时将右侧对象赋值给左侧。意思就是如果变量对象为空,可以给它赋值一个默认对象值,在理解上它可以简化代码并使其更加简洁。

string name = null;
name ??= "Unknown";
Console.WriteLine(name); // Output: Unknown

在上面的示例中,由于name的值为空,因此使用空合并赋值操作符将“Unknown”的值赋给name。

5. 宽容运算符 (!.)

允许为空的操作符(!.)用于告诉编译器值不为空,即使编译器无法确定该值不为空。当您知道一个值不会为空,但编译器无法确定它不会为空时,此操作符很有用。

string name = null!;
int length = name.Length;
Console.WriteLine(length); // Output: System.NullReferenceException

在上面的例子中,宽容操作符用于告诉编译器name的值不可为空。但是,由于name的值实际上是空的,所以系统在运行时抛出NullReferenceException。

6. 使用 is 运算符

在C#编程语言中,“is”操作符是一个关键字,用于检查变量是否与特定类型兼容。随着C#7.0中常量模式的引入,这个运算符获得了额外的功能。具体来说,现在可以使用“is”操作符将值与常量(如null)进行比较。

if (name is null)
{
   // code to execute
}
Console.WriteLine(name);

使用“is”运算符的扩展功能使开发人员能够在c#应用程序中执行类型检查和比较时编写更简洁、更可读的代码。

或者,您也可以使用操作符检查:==null

object obj = null;

if (obj == null)
{
    // do something if obj is null
}
else
{
    // do something else if obj is not null
}

这两种方法都可以,但是使用操作符进行检查可能更具可读性和表现力,特别是当与其他类型检查 is null 结合使用时。

7. ArgumentNullException 参数空异常

最后,ArgumentNullException类用于处理传递给方法或构造函数的空参数。当您需要确保传递给方法或构造函数的参数不为空时,该类非常有用。

public void DoSomething(string name)
{
    if (name == null)
    {
        throw new ArgumentNullException(nameof(name));
    }
    
    Console.WriteLine($"Hello, {name}!");
}

// Usage
DoSomething(null); // Output: System.ArgumentNullException: Value cannot be null. (Parameter 'name')

在上面的例子中,ArgumentNullException类用于在name的值为空时抛出异常。

结论

在软件开发中,处理null值是非常重要的事情。我们讨论了在C#中处理null值的7种技术。此外,在C#中处理null值对于避免空引用异常和其他意外行为也很重要。

标签:null,语言,C#,Unknown,运算符,操作符,NULL,string,name
From: https://www.cnblogs.com/rjf1979/p/17767246.html

相关文章

  • AtCoder Beginner Contest 180 F Unbranched
    洛谷传送门AtCoder传送门首先进行一个容斥,把连通块最大值\(=K\)变成\(\leK\)的方案数减去\(\leK-1\)的方案数。考虑dp,设\(f_{i,j}\)表示当前用了\(i\)个点,\(j\)条边。转移即枚举其中一个连通块的大小\(k\)。为了不算重,我们强制让这个连通块包含点\(1\),类......
  • Adobe2024全家桶大更新, 包含Win/Mac M1 M2 ,安装教程分享
    按照以往的惯例每年的10月份下旬将会迎来Adobe一年一度的软件大更新,大家期待已久的Adobe2024全家桶终于来了,这次可以说是不痛不痒的大更新,喜欢尝鲜的小伙伴赶紧安排上!Adobe2024全套更新最新Adobe2024全集桶,拥有更强大的内容,更完善的功能,更全面的软件,给你带来全新不一样的体......
  • 【京东开源项目】微前端框架MicroApp 1.0正式发布
    介绍MicroApp是由京东前端团队推出的一款微前端框架,它从组件化的思维,基于类WebComponent进行微前端的渲染,旨在降低上手难度、提升工作效率。MicroApp无关技术栈,也不和业务绑定,可以用于任何前端框架。源码地址:https://github.com/micro-zoe/micro-app官网地址:https://micro-......
  • CSP-S 大纲
    CPS-S大纲2.2.1基础知识与编程环境【5】Linux系统终端中常用的文件与目录操作命令【5】Linux系统下常见文本编辑工具的使用【5】g++、gcc等编译器与相关编译选项【5】在Linux系统终端中运行程序,使用time命令查看程序用时【5】......
  • 【分布式】解决树莓派4B-64位更换清华源问题(GPG error:because the public key is no
    【分布式】解决树莓派4B-64位更换清华源问题(GPGerror:becausethepublickeyisnotavailable)别出BUG求求了于2022-04-3016:15:38发布阅读量3.1k收藏18点赞数7分类专栏:分布式文章标签:debianbash树莓派清华源publickey版权分布式专栏收录该内容18篇文章1......
  • webpack模块打包工具
    yarn包管理器快速、可靠、安全的依赖管理工具。和npm类似,都是包管理工具,可以用于下载包,就是比npm快中文官网地址:https://yarn.bootcss.com/下载yarn下载地址:https://yarn.bootcss.com/docs/install/#windows-stablewindows-软件包(在笔记文件夹里)mac-......
  • Security Reduction学习笔记(2):预备知识(群环域,双线性配对,哈希函数)
    省略部分可参考密码协议学习笔记(1.4):密码学的一些数学基础-Isakovsky-博客园(cnblogs.com)有限域:$\mathbb{F}$是有限个元素的集合若$(\mathbb{F},+,*)$满足某些条件(条件略),则称其为有限域(FiniteField,或称Galois域)其零元,单位元分别记为$0_{\mathbb{F}},1_{\mat......
  • MBR10100CT-ASEMI肖特基二极管MBR10100CT
    编辑:llMBR10100CT-ASEMI肖特基二极管MBR10100CT型号:MBR10100CT品牌:ASEMI芯片个数:2封装:TO-220恢复时间:>50ns工作温度:-65°C~175°C浪涌电流:150A正向电流:10A反向耐压:100V正向压降:0.8V引脚数量:4MBR10100CT特性:ASEMI品牌MBR10100CT是采用工艺芯片,该芯片具有良好的稳定性......
  • [CISCN2019 华东南赛区]Web11
    原理smartySSTI模板注入解题过程首先进入靶场,看到currentIP,猜测是自己的ip,怎么获取的,大概率是请求包的X-Forwarded-For字段之后又看到了文件底部的smarty,是php的一种模板,思路清晰了,估计是在X-forwarded-for进行ssti注入二话不说抓包没看到X-Forwarded-For字段咋办,自己写......
  • ASP.NET Core Minimal API之optional route parameter with default value and option
    publicstaticvoidMain(string[]args){varbuilder=WebApplication.CreateBuilder(args);varapp=builder.Build();app.MapGet("/product/{name}",(stringname)=>$"Theproductis{name}").WithName("product&......