C# ?的使用
栏目总目录
可空类型标记符(?
)
说明:
- 可空类型标记符
?
用于指示某个值类型(如int
、float
等)可以为null
。这是C# 2.0引入的一个特性,用于处理数据库查询、JSON解析等场景中可能出现的空值。
示例代码:
int? nullableInt = 5;
int? nullableIntWithNull = null;if (nullableInt.HasValue)
{Console.WriteLine(nullableInt.Value); // 输出: 5
}if (!nullableIntWithNull.HasValue)
{Console.WriteLine("The value is null."); // 输出: The value is null.
}
空值传播操作符(?.
)
说明:
- 空值传播操作符
?.
用于在访问可能为null
的对象的成员之前进行空检查。如果对象为null
,则不会尝试访问其成员,而是直接返回null
。
示例代码:
string str = null;
int? length = str?.Length; // length 为 null,因为 str 为 nullPerson person = null;
string jobTitle = person?.JobTitle; // jobTitle 为 null,因为 person 为 nullperson = new Person { JobTitle = "Software Engineer" };
jobTitle = person?.JobTitle; // jobTitle 为 "Software Engineer"
条件(三元)运算符(?:
)
说明:
- 条件运算符
?:
是C#中的三元运算符,用于根据条件选择两个值之一。其语法为condition ? expression1 : expression2
。
示例代码:
int x = 10;
int y = 5;
int max = x > y ? x : y; // max 为 10Console.WriteLine("最大值: " + max);
空值合并操作符(??
)
说明:
- 空值合并操作符
??
用于在第一个操作数为null
时返回第二个操作数的值,否则返回第一个操作数的值。这常用于提供默认值以避免null
引发的异常。
示例代码:
string name = null;
string displayName = name ?? "匿名用户"; // displayName 为 "匿名用户"string username = "DeveloperDave";
displayName = username ?? "Newbie"; // displayName 为 "DeveloperDave",因为 username 不为 nullConsole.WriteLine(displayName);
空值合并赋值运算符(??=
)
说明:
- 空值合并赋值运算符
??=
是C# 8.0及更高版本中引入的一个特性,它结合了空值合并运算符(??
)和赋值运算符(=
)的功能。这个运算符用于将右侧的值赋给左侧的变量,但仅当左侧的变量为null
时。如果左侧的变量不为null
,则不会更改其值。这提供了一种更简洁的方式来为可能为null
的变量提供默认值或更新它们的值,而无需编写额外的if
语句。
示例代码:
string firstName = null;
firstName ??= "未知"; // 如果 firstName 是 null,则将其设置为 "未知"
Console.WriteLine(firstName); // 输出: 未知firstName = "John";
firstName ??= "未知"; // firstName 不是 null,所以不会更改其值
Console.WriteLine(firstName); // 输出: John// 示例使用可空类型
int? age = null;
age ??= 30; // 如果 age 是 null,则将其设置为 30
Console.WriteLine(age.HasValue ? age.Value.ToString() : "null"); // 输出: 30age = 25;
age ??= 30; // age 不是 null,所以不会更改其值
Console.WriteLine(age.HasValue ? age.Value.ToString() : "null"); // 输出: 25// 示例使用类对象的属性
Person person = null;
person ??= new Person { Name = "默认名称" }; // 如果 person 是 null,则创建新实例并赋值
if (person != null)
{Console.WriteLine(person.Name); // 如果 person 是新创建的实例,则输出: 默认名称
}person = new Person { Name = "John Doe" };
person.Name ??= "默认名称"; // person.Name 不是 null,所以不会更改其值
Console.WriteLine(person.Name); // 输出: John Doe
在上面的示例中,??=
运算符首先检查左侧的变量(或属性)是否为null
。如果是,则将其设置为右侧的值;如果不是,则保持其当前值不变。这种操作对于初始化可能为null
的变量或在某些条件下更新它们非常有用。
请注意,最后一个示例中尝试使用??=
来更新Person
对象的Name
属性可能不会按预期工作,因为??=
是专门为变量赋值设计的,而不是用于属性的。在属性上使用??=
会导致编译错误,除非该属性是特殊的(如可空值类型的自动实现属性)。
相关文章:
C# ?的使用
栏目总目录 可空类型标记符(?) 说明: 可空类型标记符?用于指示某个值类型(如int、float等)可以为null。这是C# 2.0引入的一个特性,用于处理数据库查询、JSON解析等场景中可能出现的空值。 示例代码&am…...

【unity小技巧】unity性能优化以及如何进行性能测试
文章目录 前言GPU性能优化打包素材 CPU性能优化代码执行优化 性能测试Vector2.Distance 和 sqrMagnitude哪个好?动画切换优化shader属性优化 URP渲染器资产优化对象池优化删除没必要的空函数图片、音乐音效、贴图等素材压缩ScriptableObject优化参数参考完结 前言 …...
算法参考改进点/知识点
1、clip文章中改进点 图像编码器image encoder: 将全局平均池化层替换为注意力池化机制。注意力池化机制:通过一个单层的“transformer式”多头QKV注意力,其中查询query是基于图像的全局平均池表示。改进VIT(Vision Transformer…...

electron 配置、打包 -报错解决
目录 一、配置途中遇到的问题: 二、 make 配置好后开始打包 三、Electron-builder 打包报错 一、配置途中遇到的问题: 1. 安装 yarn add electron -D 一直卡在这里失败 一直卡可以使用下面这个,然后再重新装依赖 1. 采用新的镜像地址 npm …...
基于STM32设计的智能鱼缸(华为云IOT)(200)
文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】设计实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置【3】自动换水原理1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献1.4 开发工具的选择【1】设备端开发【2】上位…...

Django与数据库
目录 创建项目app 路由子表 数据库 创建数据库 什么是ORM 定义数据库表 Django Admin 管理数据 过滤条件 代码直接生成HTML 使用模板 前后端分离架构 对资源的增删改查处理 列出客户 添加客户 临时取消 CSRF 校验 修改客户信息 删除客户 Django中ORM的处理 数据模…...
大数据系列之:CentOS7安装R详细步骤
大数据系列之:CentOS7安装R详细步骤 一、下载R二、解压R三、创建安装目录四、指定安装目录五、安装编译依赖六、编译与编译安装七、设置环境变量八、激活环境变量九、执行R命令十、执行demo测试程序 一、下载R wget https://cran.r-project.org/src/base/R-4/R-4.4…...

Linux学习第57天:Linux PWM驱动实验
Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本章的思维导图如下: 一、PWM驱动简析 1、设备树下的PWM控制节点 8 路 PWM 都属于 I.MX6ULL 的 AIPS-1 域,分为了两部分, PWM1~P…...
git 远程拉取指定文件
指定操作 git init 创建一个空的文件 git remote add orgin 远程仓库地址链接 表示添加远程库的地址 git config core.sparsecheckout true 打开sparsecheckout功能 注意:如果需要分支内所有文件,这个指令可以直接过忽略,则会拉取对应分支所有的文件…...

【css】 CSS3+JS做一个酷炫的仪表进度条3d进度条
创建一个动态进度环组件 在现代网页设计中,进度环是一种常见的视觉元素,用于展示任务的完成度或加载状态。本文将介绍如何使用Vue.js和Less创建一个动态进度环组件,该组件不仅具有美观的视觉效果,还能够根据用户输入动态改变颜色…...

uniapp小程序全局配置分享到朋友和朋友圈功能的实现
文章目录 1.创建/mixins/share.js插件2.全局配置3.编写share.js4.调用5.分享成功 1.创建/mixins/share.js插件 直接创建 2.全局配置 (1)找到main.js在下面引入share.js文件 (2)使用mixins混入vue中,这样就相当于在每一…...
Java优化后台分页
第一种情况:先查询出所有记录,再进行分页处理(分页中可以异步处理) 优化前: List<String> list Arrays.asList("1","2","3","4","5","6","…...

<数据集>电梯内人车识别数据集<目标检测>
数据集格式:VOC格式 图片数量:97张 标注数量(xml文件个数):97 标注类别数:3 标注类别名称: [person, motorcycle, bicycle] 序号类别名称图片数框数1person891322motorcycle78793bicycle2222 使用标注工具&#…...

二百五十三、OceanBase——Linux上安装OceanBase数据库(三):OBD页面上部署OceanBase数据库
一、目的 安装OceanBase后,启动obd web,需要在OBD页面上部署OceanBase数据库 二、参考文档 http://t.csdnimg.cn/Qeedq 三、实施步骤 1 在obadmin用户下,启动obd服务,登录页面访问 [obadminhurys23 oceanbase]$ obd web 2 登…...

Redis应用笔记
Redis应用笔记 一、 前言二、 Redis八种常用数据类型2.1 Redis的五种基本数据类型2.2 Redis的三种特殊数据类型 三、发现Redis热Key方案3.1 使用 Redis 自带的 --hotkeys 参数来查找3.2 使用MONITOR 命令3.3 借助开源项目 四、解决 hotkey五、Redis 内存碎片5.1 为何会有Redis …...

html实现好看的塔罗牌、十二星座运势网站源码
文章目录 1.设计来源1.1 十二星座1.2 所有界面效果图 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/deta…...

万字长文带你入门shell编程(超详细)
一、概述 Shell 是计算机操作系统中用户与操作系统内核之间的接口层,它提供了一种方式让用户能够通过命令行界面(CLI)与操作系统交互。Shell 可以被视为一个命令解释器,它接收用户输入的命令,解析这些命令,…...

音质提升秘籍:专业音频剪辑软件汇总
现在欣赏传输音频文件比以前简单多了,这些音频的质量也影响了听众的体验与感受。所以使用一些靠谱的音频剪辑工具处理音频能让你的音频文件呈现更好的效果。 1.福昕音频剪辑 链接直达>>https://www.foxitsoftware.cn/audio-clip/ 这是一款电脑端软件。别看…...

idea配置
在我们使用idea的时候会进行配置主要就idea编译器的下载,maven资源管理器,Tomcat服务器 在IntelliJ IDEA的官网进入http://www.jetbrains.com/idea/ 如图如果你是大学生的话一般学校会有相关的激活码直接选择左边的.exe文件下载,直接的就是企…...
将 WinForms 中的 Panel 替换为 WPF 的 WindowsFormsHost 元素
要将 WinForms 中的 Panel 替换为 WPF 的 WindowsFormsHost 元素,你需要执行以下步骤:1. 添加对 WindowsFormsIntegration 的引用:确保你的项目引用了 WindowsFormsIntegration 和 PresentationCore、PresentationFramework 程序集࿰…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...