zoukankan      html  css  js  c++  java
  • c#:无法将 NULL 转换成“System.DateTime”,因为它是一种值类型(转)

    摘自:http://www.blogjava.net/parable-myth/archive/2010/09/30/333454.html

    在C# 2.0里面的数据类型中,分为值类型和引用类型,引用类型可以初始化为null,可是值类型是不可以的。

    比如经常用到的System.Guid类型,要么赋值为Guid.NewId,要么赋值为Guid.Empty。
    再比如System.DateTime,默认初始化为DateTime.MinValue。

    强行给值类型赋null值,编译就不会通过,会报出类似下面的异常:
    错误 1 无法将 NULL 转换成“System.DateTime”,因为它是一种值类型
    这个时候就要借助Nullable<T>结构体了。

    拿DateTime举例,完整的写法:
    Nullable<DateTime> now = DateTime.Now;
    Nullable<DateTime> now = null;
    当然也可以缩写:
    DateTime? now = DateTime.Now;
    DateTime? now = null;
    我们可以直接对now赋值,但实际上是给now.Value赋值。

    既然可以为空,就涉及到判断了,以下两种方式都是可行的:
    if (now != null) {}
    if (now.HasValue()) {}
    有一点需要注意的是,值类型可以通过这种方法变成引用类型,但是引用类型不可以哟。比如下面这段代码:
    Nullable<string> test = "ddd";
    这段代码编译无法通过,会报出以下异常:
    错误 1 类型“string”必须是不可为空的值类型才能用作泛型类型或方法“System.Nullable<T>”中的参数“T”

  • 相关阅读:
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    72. Edit Distance
    583. Delete Operation for Two Strings
    582. Kill Process
    indexDB基本用法
    浏览器的渲染原理
    js实现txt/excel文件下载
    git 常用命令
    nginx进入 配置目录时
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/3150579.html
Copyright © 2011-2022 走看看