C#实用小知识:string和判断null

  • string

string是常用的类型,它具有不可变性:就是一旦赋值,就不可变,如果再赋值 ,就重新开辟内存空间;保留性:如果一个字符串存在,另一个与其相同,他们会指向同一个地址,不会再开辟新内存空间;

下面的Demo作个证明:

public unsafe void Run()
{string a = "abcd";string b = "abcd";fixed (char* p = a){Console.WriteLine("原a字符串地址= 0x{0:x}", (int)p);}fixed (char* p = b){Console.WriteLine("原b字符串地址= 0x{0:x}", (int)p);}b = b+"efg";fixed (char* p = b){Console.WriteLine("新b字符串地址= 0x{0:x}", (int)p);}
}

结果

string还提供了一些其他方法:

string.Empty,和""是一样的;

string.IsNullOrEmpty(string)判断一个字符串==null或==""返回true

string.IsNullOrWhiteSpace(string) 判断一个字符串==null或==""或==" "返回true

  • 判断Null

如果有这样一段代码:

var appOrder = new AppOrder();
if (appOrder == null)
{WriteLine("appOrder == null:appOrder is null");
}

你觉结果会输出吗?

常理是不会输出appOrder == null:appOrder is null但真正的结果是还真不一定,这里不能被new AppOrder欺骗了,因为还要看AppOrder对==的理解是什么。

如果代码是这么写:

class NullDemo : Demo{public void Run(){var appOrder = new AppOrder();if (appOrder == null){WriteLine("appOrder == null:appOrder is null");}       }}class Order{public static bool operator ==(Order left, Order right){return true;}public static bool operator !=(Order left, Order right){return true;} }
class AppOrder : Order
{
}

appOrder == null:appOrder is null还真能输出,因为==被赋予了永恒相等,看起来判断为null用==不靠谱,那用什么呢?

 if (appOrder is null){WriteLine("appOrder is null:appOrder is null");}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

s6730堆叠_不再只是堆叠硬件 ivvi S6全方位评测

【PConline 评测】ivvi是酷派公司的又一个全新的子品牌,与旗下的电商品牌“大神”相比,ivvi的定位更为高端,动用酷派公司的顶级资源打造,通过线上线下一体销售。在机身做工设计与硬件选用方面ivvi尽善尽美,集合了酷派手…

.net html5页面缓存,详解HTML5中的manifest缓存使用

起源html5之前的网页,都是无连接,必须联网才能访问,这其实也是web的特色,这其实对于PC是时代问题并不大,但到了移动互联网时代,设备终端位置不再固定,依赖无线信号,网络的可靠性变得…

机器学习的最佳学习路线原来只有四步

AI这个词相信大家都非常熟悉,近几年来人工智能圈子格外热闹,光是AlphoGo就让大家对它刮目相看。今天小天就来跟大家唠一唠如何进军人工智能的第一步——机器学习。在机器学习领域,Python已经成为了主流。一方面因为这门语言简单易上手&#x…

AutoCAD VBA基于对象的分层

AutoCAD VBA基于对象的分层,讲不同对象根据特性分层,代码如下。 Dim Value As Variant Value ThisDrawing.GetVariable("cmdecho") ThisDrawing.SetVariable "cmdecho", 0 Dim ObjLayer As AcadLayer Set ObjLayer ThisDrawing.La…

ASP.NET Core Filter如何支持依赖注入

概述通过使用 ASP.NET Core 中的筛选器,可在请求处理管道中的特定阶段之前或之后运行代码。内置筛选器处理任务,例如:授权(防止用户访问未获授权的资源)。响应缓存(对请求管道进行短路出路,以便…

做流向图_各类型供热暖系统图大全,一饱眼福!

↑ 点击上方“暖通风向标”关注我们推广.暖通风向标本文来源:制冷网好书推荐做热泵这几本书你不得不看!区域供热系统热电联产系统地热水供暖系统即热式生活热水系统即热式特点:可保证用户随时随地均有热水供应,系统紧凑,无需储罐&…

怎样和程序猿谈一场不散场的爱情

这篇文章就教你如何优(xin)雅(ji)的驯服程序猿男友。先分享2个网友的养猿故事。对于程序员,大家想必会有这么一个印象:生活简单乏味,除了编程、吃饭、睡觉,就是上网、打游戏或者一副…

ITU-R BT.656 协议

ITU-R BT.601和ITU-R BT.656国际电信联盟(International Telecommunication Union)无线通信部门(ITU-R)制定的标准。严格来说,ITU-R BT.656应该是隶属ITU-R BT.601的一个子协议。ITU-R BT.601是演播室数字电视编码参数…

html下拉菜单的子目录,html - 带有下拉菜单的子菜单的垂直下拉菜单 - 堆栈内存溢出...

我想用以下结构制作一个垂直下拉菜单(对于每个“按钮”一个不同的“下拉” div)。这个想法是当我将“按钮”悬停时,“下拉”以相同的方式出现在“按钮”上大小 (“下拉列表”缩小为高度“ subnav1”相等的“按钮”大小)或显示在“下拉列表”的左侧 (再次具有“ subn…

一年增加1.2w星,Dapr能否引领云原生中间件的未来?

作者 | 敖小剑Dapr 将引领云原生时代应用和中间件的未来。Dapr 是由微软发起的云原生开源新项目,在今年 2 月份刚刚发布了 v1.0 正式版本。虽然推出至今不过一年半时间,但 Dapr 发展势头十分迅猛,目前已经在 GitHub 上收获了 1.2w 星。阿里是…

kylin如何支持flink_日均万亿条数据如何处理?爱奇艺实时计算平台这样做

1.爱奇艺 Flink 服务现状爱奇艺从 2012 年开始开展大数据业务,一开始只有二十几个节点,主要是 MapReduce、Hive 等离线计算任务。到 2014 年左右上线了 Storm、Spark 实时计算服务,并随后发布了基于 Spark 的实时计算平台 Europa。2017 年开始…

VI3的VLAN配置:VST、EST和VGT标记

VMware专家谈及在VMware Infrastructure(VI3)中使用虚拟LAN(VLAN)时,他们通常是指VLAN Trunk的使用。不过,VI3使用的VLAN配置还有其他三种类型:Virtual Switch Tagging(虚拟交换机标记,缩写VST …

没错,纯SQL查询语句可以实现神经网络

我们熟知的SQL是一种数据库查询语句,它方便了开发者在大型数据中执行高效的操作。但本文从另一角度嵌套SQL查询语句而构建了一个简单的三层全连接网络,虽然由于语句的嵌套过深而不能高效计算,但仍然是一个非常有意思的实验。在这篇文章中&…

html5 控制鼠标移动,HTML5 Canvas随鼠标移动的引力粒子群

JavaScript语言:JaveScriptBabelCoffeeScript确定use strict;// Initial Setupvar canvas document.querySelector(canvas);var c canvas.getContext(2d);canvas.width innerWidth;canvas.height innerHeight;// Variablesvar mouse {x: innerWidth / 2,y: inn…

茫茫内存,我该如何用 windbg 找到你 ?

一:背景 1. 讲故事前天wx上有个朋友丢给我一个dump,让我帮忙鉴定一下某些敏感信息在内存中是否也是加密的,现在数据安全很重要,不仅数据库中的信息要加密,灌到内存后数据同样也需密文存储,随用随解密&#…

初中数学知识点总结_初中数学知识点总结大全_经典版_

初中数学必考知识点总结一、基本知识㈠、数与代数A、数与式:1、有理数有理数:①整数→正整数/0/负整数②分数→正分数/负分数数轴:①画一条水平直线,在直线上取一点表示0(原点),选取某一长度作为单位长度,规…

官方的正则表达式组件 RegularExpressions (4) : 表达式选项

TRegExOption (roNone, //无roIgnoreCase, //不区分大小写roMultiLine, //多行模式; 可使 ^ 和 $ 匹配每个行首或行尾roExplicitCapture, //只捕获指定了名称或编号的子表达式roCompiled, //预编译表达式; 这在反复使用更有效率roSing…

一篇文章,带你了解 “机器学习工程师” 必备技能图谱

5月8日,谷歌召开一年一度的Google I/O大会。在现场演示的演示中,Google Assistant表现得自然流畅,电话那头的理发店员工丝毫没有察觉到自己竟然是在和AI对话!阿里的王坚博士曾在一次主题演讲里谈到:「不要担心 AI 毁灭…

俄语使用计算机怎么说,计算机俄语常用词汇

计算机俄语常用词汇аксессуары 附件микрофон 话筒наушники 耳机MIDI клавиатура MIDI键盘MP3 плеер MP3播放器очки 眼镜иктофон 录音机ержатель копий 拷贝存放夹Принтеры 打印机матричный…

一日一技:在Ocelot网关中实现IdentityServer4密码模式(password)

概述IdentityServer4 是为ASP.NET Core 2.系列量身打造的一款基于 OpenID Connect 和 OAuth 2.0 认证框架。将identityserver部署在你的应用中,具备如下的特点可以为你的应用(如网站、本地应用、移动端、服务)做集中式的登录逻辑和工作流控制…