关于datetime和int 是否可为null的问题

时间:2022-12-12 14:40:24

一个对象的属性中有一个datetime类型的属性,在赋值时未给予赋值,此时系统会分配给它一个最小的时间,不会是null值,与int类型相似,datetime也不会有null类型,

先来看一段代码:

关于datetime和int 是否可为null的问题

null值用来表示数据类型未被赋予任何值,它是一种引用类型且它只能赋值给引用类型,由于string是一个特殊的引用类型,因此编译器不会报错。

但是当它赋值给值类型int类型的时候,编译器就会报错:

关于datetime和int 是否可为null的问题

我们知道数据库中是有NULL值的,例如下面的一张表,年龄(int类型)是可以为空的,代表目前不知道此人年龄,那么当我们在C#代码向数据库插入数据时,就会需要一个可空的int类型。

关于datetime和int 是否可为null的问题

但是int、bool等这些类型不能表示数据库中的“Null” 。因此C#提供了“可空类型”这种语法,只要在类型后加?就构成了可空的数据类型,比如int?、bool?,这样
int? i=null 就可以了。解决数据库中int可以为null,而C#中int不能为null的问题。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace 可空数据类型
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. //string s1 = null;
  12. int? i = null;
  13. Console.WriteLine(i);
  14. }
  15. }
  16. }

由于i为空,所以不会有任何数据显示。

关于datetime和int 是否可为null的问题

T?其实是System.Nullable<T>的简写,可空类型在ADO.NET编程中大量使用,用来解决数据库与C#代码数据类型不一致的问题。

来看一下msdn文档中关于System.Nullable的说明:

关于datetime和int 是否可为null的问题

关于datetime和int 是否可为null的问题

关于datetime和int 是否可为null的问题

System.Nullable的定义:

关于datetime和int 是否可为null的问题

由它的定义可知:判断可空类型是否为空,用i==null或者i.HasValue;得到可空变量的值,int i1=(int)i.Value或者int i1=i.Value。
类型转换:不可空类型赋值给可空类型无需显式转换(一定成功),可空类型赋值给不可空类型则需显式转换(不一定成功)

如果int? i3 = null;

  1. static void Main(string[] args)
  2. {
  3. int? i = null;
  4. int? i3 = null;
  5. //int? i3 = 8;//不可空类型赋值给可空类型无需显式转换(一定成功)
  6. if (i3 == null)
  7. {
  8. Console.WriteLine("i3为空");
  9. }
  10. else
  11. {
  12. i3++;
  13. int i4 = (int)i3;//可空类型赋值给不可空类型则需显式转换(不一定成功)例如i3为空,则不成功!
  14. Console.WriteLine("i3不为空,{0}", i3);
  15. }
  16. if (i3.HasValue)
  17. {
  18. int i4 = i3.Value;
  19. Console.WriteLine("i3不为空,{0}", i3);
  20. }
  21. else
  22. {
  23. Console.WriteLine("i3为空!");
  24. }
  25. }

关于datetime和int 是否可为null的问题

如果int? i3 = 8;

  1. static void Main(string[] args)
  2. {
  3. int? i = null;
  4. //int? i3 = null;
  5. int? i3 = 8;//不可空类型赋值给可空类型无需显式转换(一定成功)
  6. if (i3 == null)
  7. {
  8. Console.WriteLine("i3为空");
  9. }
  10. else
  11. {
  12. i3++;
  13. int i4 = (int)i3;//可空类型赋值给不可空类型则需显式转换(不一定成功)例如i3为空,则不成功!
  14. Console.WriteLine("i3不为空,{0}", i3);
  15. }
  16. if (i3.HasValue)
  17. {
  18. int i4 = i3.Value;
  19. Console.WriteLine("i3不为空,{0}", i3);
  20. }
  21. else
  22. {
  23. Console.WriteLine("i3为空!");
  24. }
  25. }

关于datetime和int 是否可为null的问题

关于datetime和int 是否可为null的问题的更多相关文章

  1. 使用&period;NET向webService传double、int、DateTime 服务器得到的数据时null的问题&lpar;转http&colon;&sol;&sol;blog&period;csdn&period;net&sol;slimboy123&sol;article&sol;details&sol;4366701&rpar;

    用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型.double和D ...

  2. DateTime&quest;转化为DateTime,int&quest; 转 int

    深入理解C#---1.可空类型 https://blog.csdn.net/tianzeyu1992/article/details/52618131 原文:https://blog.csdn.net ...

  3. 关于datetime 和 int 之间相互转换

    在其他地方看到一个有点意思的东西.是记录转换规则的. DECLARE @Date1 DATETIME = '2016-06-21 11:53:00' , @Date2 DATETIME = '2016 ...

  4. python 将mysql数据库中的int类型修改为NULL 报1366错误,解决办法

    gt.run_sql()是用pymysql 封装的类 distribution_sort_id type: int目的:将此字段值全部修改为NULL g=2gt.run_sql("updat ...

  5. Mysql时间存储类型优缺点?DATETIME&quest;TIMESTAMP&quest;INT&quest;

    TIMESTAMP 4个字节储存;值以UTC格式保存;.时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区. DATETIME 8个字节储存;实际格式储存;与时区无关;datetime  ...

  6. Mysql存储日期类型用int、timestamp还是datetime&quest;

    通常存储时间用datetime类型,现在很多系统也用int存储时间,它们有什么区别?个人更喜欢使用int这样对于日期计算时比较好哦,下面我们一起来看到底那种会好些. int ().4个字节存储,INT ...

  7. 用TIMESTAMP类型取代INT和DATETIME

    时间在我们开发中应用非常普遍,大部分开发中我们将用Mysql的datetime格式来存储,但是对于经常用时间来排序或者查询的应用中,我们要将时间做成索引,这个就跟查询效率很有关系,但是很多程序员会用i ...

  8. MySQL时间字段究竟使用INT还是DateTime

    今天解析DEDECMS时发现deder的MYSQL时间字段,都是用 `senddata` ) unsigned '; 随后又在网上找到这篇文章,看来如果时间字段有参与运算,用int更好,一来检索时不用 ...

  9. C&num;根据日期DateTime和持续时间int找到日期

    protected DateTime GetFinish(DateTime start, int duration) { return start.AddDays(duration); } prote ...

随机推荐

  1. C&num;利用摄像头拍照功能实现

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. 配置Tomcat6的管理用户

    在Tomcat上发布war之前需要配置一个管理用户以进入上传页面,而配置就是通过修改/usr/local/tomcat6/conf/tomcat-users.xml这个文件进行的.下面是修改后的文字: ...

  3. JAVA多线程synchronized详解

    Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 当两个并发线程访问同一个对象object中的这个synchronized(this)同 ...

  4. &period;net开发windows服务

    最近一个月都异常的繁忙,项目进度非常的紧,回头看看自己的blog,整整一个5月都没有一篇文章,非常惭愧,现在补几篇文章,介绍一下我最近关注的技术.这篇文章将介绍Windows服务程序的开发.摘要:本文 ...

  5. 取URL得值

    有这样一个URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参 ...

  6. Linux下的sudo及配置

    sudo的常用命令 man sudoers # 参阅帮助 visudo # 编辑sudoers文件的命令 sudo -l # 查看可执行或禁止执行的命令 sudo -u user1 /bin/ls # ...

  7. 小tips:path的join和resolve的使用区别

    1.连接路径:path.join([path1][, path2][, ...]) path.join()方法可以连接任意多个路径字符串.要连接的多个路径可做为参数传入. path.join()方法在 ...

  8. Centos 7&period;5下搭建SVN源代码服务器

    1.先查看是否存在svn,没有就需要安装svn svnserve --version #查看svn版本号 which svn #查看svn程序所在目录 yum install subversion - ...

  9. SSM商城项目(七)

    1.   学习计划 1.Solr服务搭建 2.Solrj使用测试 3.把数据库中的数据导入索引库 4.搜索功能的实现 2.   Solr服务搭建 2.1. Solr的环境 Solr是java开发. 需 ...

  10. Nuxt&period;js &plus; koa2 入门

    1. nuxt项目初始化 下面是使用 koa 模板方法初始化一个项目,使用该方法需要将 nuxt 的版本降至1.4.2: 官方 https://zh.nuxtjs.org/guide/installa ...