当前位置:网站首页>深入理解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:刚开始接触觉得特别反人类,因为其他操作符都是从左边先开始的)。
总结:要给值类型变量赋空值,就在声明时的修饰符后添加?,使用??可以起到一个排序的效果。
边栏推荐
- Determine whether the values of two objects are equal
- WPF 截图控件之绘制方框与椭圆(四) 「仿微信」
- Site data collection -scrapy usage notes
- Start from scratch blazor server (3) -- add cookie authorization
- KRYSTAL:审计数据中基于知识图的战术攻击发现框架
- 自采集在线电脑壁纸php源码v2.0自适应端
- GBase8s Informix Dodker 高可用集群自恢复集群启动命令oninitdb的设计与实现
- Detailed arrangement of JVM knowledge points (long text warning)
- 为什么应该在开发环境中使用 Kubernetes
- 如何使用“COPY –link”加速 Docker 构建和优化缓存
猜你喜欢

Open source, compliance escort! 2022 open atom global open source summit open source compliance sub forum is about to open

Learning R language these ebooks are enough!

基于flask写的一个小商城mall项目

QT基本工程的解析

Kunlunbase instruction manual (IV) real time synchronization of data from Oracle to kunlunbase

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

ES6 arrow function this points to

一键搭建博客:如何使用WordPress插件搭建专属博客

什么是 Kubernetes 自定义资源定义 (CRD)?

牛客网刷题
随机推荐
大伟 Golang之路
Using xgboost with tidymodels
Kunlunbase instruction manual (IV) real time synchronization of data from Oracle to kunlunbase
开放原子开源基金会秘书长孙文龙 | 凝心聚力,共拓开源
Using R-Pack premsim to predict microsatellite instability based on gene expression
【图像检测】基于灰度图像的积累加权边缘检测方法研究附matlab代码
Kunlunbase instruction manual (III) data import & synchronization
Pytorch 入门
基于flask写的一个小商城mall项目
LeetCode_ 416_ Divide equal sum subsets
自采集在线电脑壁纸php源码v2.0自适应端
8.穿插-从架构设计到实践理解ThreadPoolExecutor线程池
大伟 GBase8s游标稳定性读ESQL测试用例
『知识集锦』一文搞懂mysql索引!!(建议收藏)
The heavy | open atomic school source activity was officially launched
Less than 10% of the 3 software test interview questions can be answered correctly! How many do you know?
Meeting OA project (V) -- meeting notice and feedback details
If distributed file storage is realized according to integrated Minio
QT基本工程的解析
matplotlib中文问题