关于datetime和int 是否可为null的问题
一个对象的属性中有一个datetime类型的属性,在赋值时未给予赋值,此时系统会分配给它一个最小的时间,不会是null值,与int类型相似,datetime也不会有null类型,
先来看一段代码:
null值用来表示数据类型未被赋予任何值,它是一种引用类型且它只能赋值给引用类型,由于string是一个特殊的引用类型,因此编译器不会报错。
但是当它赋值给值类型int类型的时候,编译器就会报错:
我们知道数据库中是有NULL值的,例如下面的一张表,年龄(int类型)是可以为空的,代表目前不知道此人年龄,那么当我们在C#代码向数据库插入数据时,就会需要一个可空的int类型。
但是int、bool等这些类型不能表示数据库中的“Null” 。因此C#提供了“可空类型”这种语法,只要在类型后加?就构成了可空的数据类型,比如int?、bool?,这样
int? i=null 就可以了。解决数据库中int可以为null,而C#中int不能为null的问题。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace 可空数据类型
- {
- class Program
- {
- static void Main(string[] args)
- {
- //string s1 = null;
- int? i = null;
- Console.WriteLine(i);
- }
- }
- }
由于i为空,所以不会有任何数据显示。
T?其实是System.Nullable<T>的简写,可空类型在ADO.NET编程中大量使用,用来解决数据库与C#代码数据类型不一致的问题。
来看一下msdn文档中关于System.Nullable的说明:
System.Nullable的定义:
由它的定义可知:判断可空类型是否为空,用i==null或者i.HasValue;得到可空变量的值,int i1=(int)i.Value或者int i1=i.Value。
类型转换:不可空类型赋值给可空类型无需显式转换(一定成功),可空类型赋值给不可空类型则需显式转换(不一定成功)
如果int? i3 = null;
- static void Main(string[] args)
- {
- int? i = null;
- int? i3 = null;
- //int? i3 = 8;//不可空类型赋值给可空类型无需显式转换(一定成功)
- if (i3 == null)
- {
- Console.WriteLine("i3为空");
- }
- else
- {
- i3++;
- int i4 = (int)i3;//可空类型赋值给不可空类型则需显式转换(不一定成功)例如i3为空,则不成功!
- Console.WriteLine("i3不为空,{0}", i3);
- }
- if (i3.HasValue)
- {
- int i4 = i3.Value;
- Console.WriteLine("i3不为空,{0}", i3);
- }
- else
- {
- Console.WriteLine("i3为空!");
- }
- }
如果int? i3 = 8;
- static void Main(string[] args)
- {
- int? i = null;
- //int? i3 = null;
- int? i3 = 8;//不可空类型赋值给可空类型无需显式转换(一定成功)
- if (i3 == null)
- {
- Console.WriteLine("i3为空");
- }
- else
- {
- i3++;
- int i4 = (int)i3;//可空类型赋值给不可空类型则需显式转换(不一定成功)例如i3为空,则不成功!
- Console.WriteLine("i3不为空,{0}", i3);
- }
- if (i3.HasValue)
- {
- int i4 = i3.Value;
- Console.WriteLine("i3不为空,{0}", i3);
- }
- else
- {
- Console.WriteLine("i3为空!");
- }
- }
关于datetime和int 是否可为null的问题的更多相关文章
- 使用.NET向webService传double、int、DateTime 服务器得到的数据时null的问题(转http://blog.csdn.net/slimboy123/article/details/4366701)
用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型.double和D ...
- DateTime?转化为DateTime,int? 转 int
深入理解C#---1.可空类型 https://blog.csdn.net/tianzeyu1992/article/details/52618131 原文:https://blog.csdn.net ...
- 关于datetime 和 int 之间相互转换
在其他地方看到一个有点意思的东西.是记录转换规则的. DECLARE @Date1 DATETIME = '2016-06-21 11:53:00' , @Date2 DATETIME = '2016 ...
- python 将mysql数据库中的int类型修改为NULL 报1366错误,解决办法
gt.run_sql()是用pymysql 封装的类 distribution_sort_id type: int目的:将此字段值全部修改为NULL g=2gt.run_sql("updat ...
- Mysql时间存储类型优缺点?DATETIME?TIMESTAMP?INT?
TIMESTAMP 4个字节储存;值以UTC格式保存;.时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区. DATETIME 8个字节储存;实际格式储存;与时区无关;datetime ...
- Mysql存储日期类型用int、timestamp还是datetime?
通常存储时间用datetime类型,现在很多系统也用int存储时间,它们有什么区别?个人更喜欢使用int这样对于日期计算时比较好哦,下面我们一起来看到底那种会好些. int ().4个字节存储,INT ...
- 用TIMESTAMP类型取代INT和DATETIME
时间在我们开发中应用非常普遍,大部分开发中我们将用Mysql的datetime格式来存储,但是对于经常用时间来排序或者查询的应用中,我们要将时间做成索引,这个就跟查询效率很有关系,但是很多程序员会用i ...
- MySQL时间字段究竟使用INT还是DateTime
今天解析DEDECMS时发现deder的MYSQL时间字段,都是用 `senddata` ) unsigned '; 随后又在网上找到这篇文章,看来如果时间字段有参与运算,用int更好,一来检索时不用 ...
- C#根据日期DateTime和持续时间int找到日期
protected DateTime GetFinish(DateTime start, int duration) { return start.AddDays(duration); } prote ...
随机推荐
- java 读取并且显示 txt 文件
系统:mac os x 10.9 eclipse 在eclipse 中建立一个project, 命名为Cin_txt, Cin_txt的内容 test wang hello world 以下是输入的代 ...
- 浅谈Linux系统的启动流程
Linux系统的启动时通过读取不同的配置文件,执行相应的Shell脚本完成的.当然本文只是简单的从文件的角度分析,更深层次的本文没涉及. 主要读取了以下文件: /boot/grub/grub.con ...
- SQL语句 打印等腰三角形,菱形
) BEGIN 5 SET @S='' 8 BEGIN -@I) 10 BEGIN SET @S=@S+' ' END ELSE 14 BEGIN SET @S=@S+'**' 16 END END ...
- js 事件小结
1,事件对象 e || window.event //ie 2, 取鼠标点击坐标 带有滚动条的 var top = document.documentElement.scrollTop | ...
- __m128i的理解[转]
__m128i被称为128bits的整数,当我们对其赋值时,调用 __m128i _mm_set1_epi32(int i) Sets the four signed 32-bit integer v ...
- [转]设置MS Office Word for mac的默认显示比例
由于mac os的分辨率比较大,在PC上显示正常的word文档(显示比例100%),在mac下打开会很小,需要经常调整显示比例,如调到125%.130%或150%,可以通过下面方法来设置默认显示比例, ...
- Django学习(七) 创建第一个Django项目
如果这是你第一次使用Django,你必须进行一些初始设置.即,您将需要自动生成一些代码,建立了Django项目. 从命令行.cd进入一个目录,你想要存储您的代码,然后运行以下命令: django-ad ...
- Win7/Win8 系统下安装Oracle 10g 提示“程序异常终止,发生未知错误”的解决方法
我的Oracle 10g版本是10.2.0.1.0,(10.1同理)选择高级安装,提示“程序异常终止,发生未知错误”. 1.修改Oracle 10G\database\stage\prereq\db\ ...
- mysqlbackup
mysqlbackup 使用学习 1.设置数据库用户的相关权限 '; grant reload,replication client,super,process on *.* to backupuse ...
- DES、AES、TEA加密算法的比较
1. DES算法介绍: DES算法具有对称性, 既可以用于加密又可以用于解密.对称性带来的一个很大的好处在于硬件实现, DES 的加密和解密可以用完全相同的硬件来实现.DES 算法的明文分组是 ...