当前位置:网站首页>深入理解C# 可空类型
深入理解C# 可空类型
2022-07-29 10:56:00 【weixin_44326283】
值类型变量为什么不能为空
null在内存中是以全0存在的。值类型变量的值存储在内存中就会自动在值后面添加一个全0的值用来限制值类型变量的值范围。引用类型没有这种机制,所以引用类型可以为空,而值类型不能为空。但因为数据库中的所有类型都能为空,所以希望值类型能为空。
C#1中给值类型为空的方式
| 名称 | 具体操作 |
| 魔值 | 将具体的一个数作为空值,例如DateTime中的空值传给数据库中为0001-01-01 00:00:00 |
| 引用类型包装 | 进行装箱和拆箱 |
| 额外的不二标志 | 将值类型用另一个值类型进行空值判断 |
Nullable<T>
属性1:HasValue,判断是否有值
属性2:Value,真实的值
方法GetValueOrDefault,如果有真实的值就返回那个值,如果没有就返回默认值,方法的形参中可以添加值类型参数作为默认值。
C#中空值与空值或没有值相等,空值小于其他任何值。
C#2为可空类型提供的语法糖
在声明值类型时,使用?修饰符,例如:int? i; 这种方法实际是对值类型进行装箱的简化操作。
可空类型接受任何类型的隐式转换,但是可空类型必须显示转换为其他类型,并且转换为掐他类型时不能为空。
C#中的??操作符可以看作是判断空值的三元运算的简化版本。例如:
int? a = 4;
int b = 3;
int c = a ?? b;a为空时,c等于b;a不为空时,c等于a。其中a必须为可空类型否则就没有什么意义,如果c为值类型,那么a必须有值或者b必须为值类型。
??操作符还可以连用,例如:
int? a = 3;
int? b = 2;
int c = 3;
int d = a ?? b ?? c;整个语句的执行机制与上面的相同,不过是先从右边开始的,即先开始判断b和c(ps:刚开始接触觉得特别反人类,因为其他操作符都是从左边先开始的)。
总结:要给值类型变量赋空值,就在声明时的修饰符后添加?,使用??可以起到一个排序的效果。
边栏推荐
- PHP basics uses arrays to save data
- 阿里架构师耗时一年整理的《Lucene高级文档》,吃透你也是大厂员工!
- 「PHP基础知识」使用数组保存数据
- Survival analysis using rtcga clinical data
- Kunlunbase instruction manual (II) best practices for peer-to-peer deployment
- GPO:在 Start/Logon 中使用 PowerShell 脚本
- 大伟 GBase8s游标稳定性读ESQL测试用例
- 阿里P8爆出的这份大厂面试指南,看完工资暴涨30k!
- 深度强化学习应用实践技巧
- Kunlun storage vs PostgreSQL OLTP test
猜你喜欢

阿里架构师耗时一年整理的《Lucene高级文档》,吃透你也是大厂员工!

8.穿插-从架构设计到实践理解ThreadPoolExecutor线程池

Kunlunbase instruction manual (I) quick installation manual

开源峰会抢先看 | 7 月 29 日分论坛 & 活动议程速览

会议OA项目----我的审批

factoextra:多元统计方法的可视化PCA

AI模型风险评估 第2部分:核心内容

Understand what a binary tree is (types, traversal methods, definitions of binary trees)

Factoextra: visual PCA of multivariate statistical methods

leetcode-位运算
随机推荐
Learning R language these ebooks are enough!
std::vector 拷贝、追加、嵌套访问
How to realize the function of adding watermark
QT工程基本构建
Applied practical skills of deep reinforcement learning
Watch the open source summit first | quick view of the sub Forum & Activity agenda on July 29
深度强化学习应用实践技巧
自采集在线电脑壁纸php源码v2.0自适应端
周鸿祎:360是世界上最大的安全大数据公司
Error: Protobuf syntax version should be first thing in file
1.MySQL数据库的介绍
Software testing dry goods
LeetCode_ 416_ Divide equal sum subsets
Getting started with pytoch
LeetCode_ 278_ First wrong version
PHP basics uses arrays to save data
Less than 10% of the 3 software test interview questions can be answered correctly! How many do you know?
多线程顺序运行的 4 种方法,面试随便问!
IPV6基础
Exclusive interview | Cheng Li, chief technology officer of Alibaba: cloud + open source together form a credible foundation for the digital world