惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
V
Vulnerabilities – Threatpost
B
Blog
月光博客
月光博客
宝玉的分享
宝玉的分享
有赞技术团队
有赞技术团队
美团技术团队
IT之家
IT之家
B
Blog RSS Feed
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
Vercel News
Vercel News
Jina AI
Jina AI
Y
Y Combinator Blog
Recorded Future
Recorded Future
N
Netflix TechBlog - Medium
S
SegmentFault 最新的问题
L
LangChain Blog
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
PCI Perspectives
PCI Perspectives
Schneier on Security
Schneier on Security
Microsoft Azure Blog
Microsoft Azure Blog
P
Privacy International News Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
Cyber Attacks, Cyber Crime and Cyber Security
N
News and Events Feed by Topic
W
WeLiveSecurity
L
Lohrmann on Cybersecurity
Security Archives - TechRepublic
Security Archives - TechRepublic
Help Net Security
Help Net Security
Google DeepMind News
Google DeepMind News
P
Proofpoint News Feed
S
Schneier on Security
Last Week in AI
Last Week in AI
L
LINUX DO - 最新话题
Webroot Blog
Webroot Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
云风的 BLOG
云风的 BLOG
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
C
CXSECURITY Database RSS Feed - CXSecurity.com
J
Java Code Geeks
T
Threatpost
腾讯CDC
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
The Exploit Database - CXSecurity.com
H
Help Net Security

博客园 - 七思软件

基于.Net的架构设计之七 基于.Net架构设计之六 基于.Net的架构设计之五 基于.Net架构设计之四 基于.Net架构设计之三 基于.Net架构设计之二 基于.Net的架构设计之一 Microsoft.Visual.Studio.2005.Team.System 面象asp.net2.0的MasterControls控件 aspx页面中标题单点解决方案 求助,web应用程序中的进程线程控制 (The 'url' property had a malformed URL)求助 - 七思软件 Asp.net 2.0功能体验,细节之Web控件(一) 隐藏控件 Asp.net 2.0功能体验,总体设计思想 Asp.net 2.0功能体验,欢迎光临指导 C#中泛型求助 迎接.Net2.0 我只是一只碌碌无为的工蚁 : ( 论Web控件开发 - 完美上传下载控件“新”(五)
C#2.0中可空类型
七思软件 · 2005-08-31 · via 博客园 - 七思软件

最近研究了一下C#2.0中的可空类型发现一些有趣的事实,请看代码

则下面的逻辑表达式结果如何?

a==null //true
b==null //false

奇怪吗?
第一个逻辑表达式为true是意料之中的,而第二个表达式为false就有些意料之外了,但仔细想一下,就会感觉有它存在的道理。我们都知道int?就是Nullable<int>的缩写,而在.Net Framework中Nullable<T>实现其实是一个继承自值类型的结构,只是这个结构多了个属性HasValue,用来标识结构中是否有值,这样再理解上面的结果就不奇怪了,因为语句object b = a;会有一个装箱操作,也就是b中的引址为指向装箱后的a结构,而不是空引用,因此就会有上面的结果了。
这点只是C#语言中的一些小细节,但在很多时候可能会引起些不可以预料的事果,比如微软发布的DataAccessBlock中用来把存储过程的参数数组的时候SqlHelper中的代码

在某些情况下将不在有效,因为p.Value为空的判断p.Value==null在p.Value中存贮可空类型的时候可能会失效(如果p.Value中存贮的对象是可空类型,而它的值刚好为空时p.Value == null会返回false但在这种情况下我们仍应该将p.Value赋值为DBNull.Value),这时会导致运行对象没有实现IConvertable的出错信息。 改后代码如下:

总的来讲可空类型为我们提供了很大的方便,特别是在对数据库的可空字段的操作提供了方便,但使用时应注意上面的情况才能作到万无一失。