当前位置:网站首页>深入理解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
- Leetcode bit operation
- Exclusive interview | Cheng Li, chief technology officer of Alibaba: cloud + open source together form a credible foundation for the digital world
- DOD and Dor, two artifacts to reduce "cognitive bias"
- Zhou Hongyi: 360 is the largest secure big data company in the world
- LeetCode_278_第一个错误的版本
- js两个数组对象进行合并去重
- R包pedquant实现股票下载和金融量化分析
- factoextra:多元统计方法的可视化PCA
- matplotlib中文问题
猜你喜欢

QT基本工程的解析

R 语言 用黎曼和求近似 积分

Factoextra: visual PCA of multivariate statistical methods

Qt 之自定义界面(实现无边框、可移动)

StarRocks 技术内幕:实时更新与极速查询如何兼得

leetcode-位运算

Kunlunbase instruction manual (I) quick installation manual

浅谈安科瑞灭弧式智慧用电在养老机构的应用

How to realize the function of adding watermark

Leetcode binary tree series -- 144. Preorder traversal of binary trees
随机推荐
Kunlunbase instruction manual (IV) real time synchronization of data from Oracle to kunlunbase
JVM知识点详细整理(长文警告)
R包pedquant实现股票下载和金融量化分析
matplotlib中文问题
factoextra:多元统计的可视化
TCP和UDP
LeetCode_278_第一个错误的版本
Spark efficient data analysis 01. Establishment of idea development environment
LeetCode_416_分割等和子集
牛客网刷题
Site data collection -scrapy usage notes
LeetCode_1049_最后一块石头的重量Ⅱ
PaddleLite 编译以及代码跑通复盘
LeetCode_ 1049_ Weight of the last stone II
建议收藏丨sql行转列的一千种写法!!
Svn revision keyword
3.认识和操作一下mysql的基本命令
Analysis of QT basic engineering
WPF 截图控件之绘制方框与椭圆(四) 「仿微信」
INVALID_ARGUMENT : Invalid rank for input: modelInput Got: 3 Expected: 4 Please fix either the input