得到一个空值

简介:
也许你感觉到制造一个空值(null)是一个不值一提的话题
看看以下代码
1   public   class  Check // 支票
2   {
3 public string Signing;
4 public double Money; 
5 }
Check的实例在没有给Signing和Money赋值前,Signing和Money是什么值呢?
输出胜于雄辩
1  Check check  =   new  Check();
2  System.Console.WriteLine(check.Signing); // 一个空行
3  System.Console.WriteLine(check.Money); // 0
我们得到Money有了默认的double值:0
但Signing是不是空呢?
1  Check check  =   new  Check();
2  System.Console.WriteLine(check.Signing == string .Empty); // False
3  System.Console.WriteLine(check.Signing == null ); // True
结果证明了Signing是null,而不是空的字符串。看来不给Signing赋值和直接赋值为null的结果是一样的。
但是,Money为什么是0,而不是null呢?是不是只要给Money赋值为null,就可以得到我们要的空的double呢?
1  Check check  =   new  Check();
2  check.Money  =   null ; // 无法将 NULL 转换成“double”,因为它是一种值类型
失败的原因呢?还是我们上一篇说的,引用类型允许在运行时才知道值的大小,而值类型必须在编译时就知道值的大小和赋值。
不过这样的值类型特征在有些时候非常的不合适,假设我们要判断用户是不是给Signing赋值过,我们可以简单的编写check.Signing == string.Empty || check.Signing == null,但对于Money就不能简单地以System.Console.WriteLine(check.Money==0)来判断,因为用户可以显式的赋值为0。那怎么办呢?
1   public   class  Check // 支票
2   {
3 public string Signing;
4 public double? Money; 
5 }

注意第4行的double?,该类型允许为Money赋值为null
以下代码运行通过
1  Check check  =   new  Check();
2  check.Money  =   null ; //
3  System.Console.WriteLine(check.Money == null ); // True
如果不给Money赋值,他还是null吗?
恩,是的,把这个class改为struct来证明
1   public   struct  Check // 支票
2   {
3 public string Signing;
4 public double? Money; 
5 }
没有构造函数的struct会为每个字段赋默认值,输出上面struct的Money,你得到的结果是null

 



本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/806253

相关文章
|
7月前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目使用MATLAB 2022a实现时间序列预测算法,完整程序无水印。核心代码包含详细中文注释和操作视频。算法基于CNN-LSTM-SAM网络,融合卷积层、LSTM层与自注意力机制,适用于金融市场、气象预报等领域。通过数据归一化、种群初始化、适应度计算及参数优化等步骤,有效处理非线性时间序列,输出精准预测结果。
|
9月前
|
人工智能 Serverless API
《智能导购 AI 助手构建》解决方案评测:极具吸引力的产品,亟待完善的教程文档
《智能导购 AI 助手构建》解决方案评测:极具吸引力的产品,亟待完善的教程文档
289 8
《智能导购 AI 助手构建》解决方案评测:极具吸引力的产品,亟待完善的教程文档
|
9月前
|
存储 API 开发工具
【实践】基于生命周期管理的存储成本优化
本实验介绍如何在阿里云创建和管理对象存储服务(OSS)。主要内容包括:1. 创建Bucket,选择存储类型及冗余方式;2. 上传文件,推荐使用API或SDK而非控制台直接操作;3. 设置生命周期规则,管理文件的存储层级转换与自动删除。实验重点在于合理配置存储策略以降低成本,并确保数据安全。通过控制台操作,用户可以轻松管理存储资源,但需注意防止不必要的公网访问以避免费用风险。
174 1
|
10月前
|
算法 网络协议 数据挖掘
阿里云通用算力型U1实例性能、适用场景、与经济型e区别、收费标准参考
在阿里云目前的活动中,通用算力型u1实例是一款价格相对较低且性价比较高的实例规格,通用算力型Universal实例(U实例)能提供均衡的计算、内存和网络资源,支持多种处理器和多种处理器内存配比。该类型实例依托阿里云资源池化技术和智能调度算法进行动态资源管理,为您的应用提供持续的算力保障、稳定性保障、供应及弹性保障,可以满足大多数场景下的应用需求,是一款具有高性价比的企业级实例。本文为大家介绍通用算力型U1实例的性能、适用场景、收费标准,以及和经济型e实例的区别,以供参考。
|
10月前
|
监控 数据可视化 Java
深入探索:自制Agent监控API接口耗时
在微服务架构中,监控API接口的调用耗时对于性能优化至关重要。通过监控这些指标,我们可以识别瓶颈,优化系统性能。本文将分享如何自己动手实现一个Agent来统计API接口的调用耗时,提供一种有效的监控解决方案。
246 2
|
安全 Ubuntu Linux
新一代通用的Linux软件包管理工具
  1. 前言   snap和flatpak都是新一代跨Linux发行版的软件包管理技术,这两种下一代打包方法在本质上拥有相同的目标和特点:即不依赖于第三方系统功能库的独立包装。上一篇我们简单介绍了flatpak的原理,今天我们接着简要介绍snap的安全机制。   2. 简介   snap是Canoncial公司提出的新一代linux包管理工具,致力于将所有linux发行版上的包格式统一,做到“一次打包,到处使用”。目前snap已经可以在包括Ubuntu、Fedora、Mint等多个Linux发行版上使用。首先我们来了解下snap相关的各种名词:
733 0
|
存储 算法 安全
即时通讯安全篇(十一):IM聊天系统安全手段之传输内容端到端加密技术
本篇将围绕IM传输内容的安全问题,以实践为基础,为你分享即时通讯应用中的“端到端”加密技术。
869 0
即时通讯安全篇(十一):IM聊天系统安全手段之传输内容端到端加密技术
|
存储 算法 搜索推荐
【排序算法】冒泡排序、简单选择排序、直接插入排序比较和分析
本文简单介绍了冒泡排序、简单选择排序、直接插入排序,并对这三种排序进行比较,入参都是80000个随机数,比较算法耗时。进一步,我们通过代码分析三种排序算法的性能。
【排序算法】冒泡排序、简单选择排序、直接插入排序比较和分析
|
存储 Cloud Native 多模数据库
|
数据安全/隐私保护
⊕是什么意思
⊕是什么意思
1601 0
⊕是什么意思