得到一个空值

简介:
也许你感觉到制造一个空值(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

相关文章
|
应用服务中间件 视频直播 Linux
windows下使用Nginx搭建Rtmp流媒体服务器,实现视频直播功能
windows下使用Nginx搭建Rtmp流媒体服务器,实现视频直播功能
3666 0
windows下使用Nginx搭建Rtmp流媒体服务器,实现视频直播功能
|
11月前
|
存储 API 开发工具
【实践】基于生命周期管理的存储成本优化
本实验介绍如何在阿里云创建和管理对象存储服务(OSS)。主要内容包括:1. 创建Bucket,选择存储类型及冗余方式;2. 上传文件,推荐使用API或SDK而非控制台直接操作;3. 设置生命周期规则,管理文件的存储层级转换与自动删除。实验重点在于合理配置存储策略以降低成本,并确保数据安全。通过控制台操作,用户可以轻松管理存储资源,但需注意防止不必要的公网访问以避免费用风险。
242 1
|
人工智能 机器人 API
AppFlow:将文心智能体加入你的社交群聊
通过阿里云AppFlow,只需简单配置,无需编写代码,即可将百度文心智能体接入钉钉群聊,为群聊添加一个专业的AI助手。本文以钉钉群聊为例,详细介绍了如何创建钉钉应用、AI卡片、配置AppFlow连接流以及创建钉钉机器人,最终实现AI助手在群聊中的应用。
491 9
|
监控 数据可视化 Java
深入探索:自制Agent监控API接口耗时
在微服务架构中,监控API接口的调用耗时对于性能优化至关重要。通过监控这些指标,我们可以识别瓶颈,优化系统性能。本文将分享如何自己动手实现一个Agent来统计API接口的调用耗时,提供一种有效的监控解决方案。
311 2
|
自然语言处理 搜索推荐 数据可视化
合合信息开源智能文档处理“百宝箱”:加速、提质、个性化定制的高效助手
随着AI技术的发展,合合信息在CSDN 1024程序员节上发布了智能文档处理“百宝箱”,旨在解决文档处理中的非结构化文本提取难题。该工具集包括可视化文档解析前端TextIn ParseX、高精度向量化模型acge-embedding及文档解析测评工具markdown_tester,广泛适用于知识库构建、智能文档抽取、预训练语料管理等场景,助力开发者高效精准处理复杂文档。
383 0
合合信息开源智能文档处理“百宝箱”:加速、提质、个性化定制的高效助手
|
监控 网络协议 数据安全/隐私保护
vos3000外呼系统如何检查落地网关配置正常,路由分析
使用VOS3000外呼系统时,确保呼叫畅通的关键在于检查落地网关配置和进行路由分析。具体步骤包括:登录管理界面,检查网关状态和配置,配置外呼规则,测试拨打电话,以及分析日志和报告。通过这些步骤,可以确保系统稳定运行,提高外呼成功率和通话质量。
|
应用服务中间件
JavaWeb项目img标签的图片无法加载的原因及解决方法
JavaWeb项目img标签的图片无法加载的原因及解决方法
1361 0
JavaWeb项目img标签的图片无法加载的原因及解决方法
|
存储 算法 安全
即时通讯安全篇(十一):IM聊天系统安全手段之传输内容端到端加密技术
本篇将围绕IM传输内容的安全问题,以实践为基础,为你分享即时通讯应用中的“端到端”加密技术。
952 0
即时通讯安全篇(十一):IM聊天系统安全手段之传输内容端到端加密技术
|
存储 算法 搜索推荐
【排序算法】冒泡排序、简单选择排序、直接插入排序比较和分析
本文简单介绍了冒泡排序、简单选择排序、直接插入排序,并对这三种排序进行比较,入参都是80000个随机数,比较算法耗时。进一步,我们通过代码分析三种排序算法的性能。
【排序算法】冒泡排序、简单选择排序、直接插入排序比较和分析
|
存储 Cloud Native 多模数据库