• 关于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的问题。

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

    由于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;

    [csharp] view plaincopy
     
    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.    
    15.                  Console.WriteLine("i3不为空,{0}", i3);  
    16.              }  
    17.              if (i3.HasValue)  
    18.              {  
    19.                  int i4 = i3.Value;  
    20.                  Console.WriteLine("i3不为空,{0}", i3);  
    21.              }  
    22.              else  
    23.              {  
    24.                  Console.WriteLine("i3为空!");  
    25.              }  
    26.          }  


    如果int? i3 = 8;

    [csharp] view plaincopy
     
    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.    
    15.                  Console.WriteLine("i3不为空,{0}", i3);  
    16.              }  
    17.              if (i3.HasValue)  
    18.              {  
    19.                  int i4 = i3.Value;  
    20.                  Console.WriteLine("i3不为空,{0}", i3);  
    21.              }  
    22.              else  
    23.              {  
    24.                  Console.WriteLine("i3为空!");  
    25.              }  
    26.          }  


  • 相关阅读:
    需求分析作业01
    2016年秋季个人阅读计划
    个人总结
    梦断代码读后感03
    进度条16
    我的第一个小系统总结
    进度条15
    eclipse连接SqlServer2008(被它搞得惨兮兮)
    梦断代码读后感02
    Android ViewPager刷新解析
  • 原文地址:https://www.cnblogs.com/wangyuanliang/p/3214221.html
Copyright © 2020-2023  润新知