中间平昔不隐式调换,不能够明确规范表达式的类型

图片 15

中间平昔不隐式调换,不能够明确规范表达式的类型

例子:(报错了)

可空值类型

  public DateTime? time { get; set; }

图片 1

  time = item.HospOutDate.HasValue ?
DateTime.Parse(item.HospOutDate.Value.ToString(“yyyy-MM-dd HH:mm:ss”)) :
null;

 

错误提示:无法确定条件表达式的类型,因为“<null>”和“System.DateTime”之间没有隐式转换

备注

 

 

解决办法:

 

添加: DateTime? TimeNull = null;

一种类型认为是可以为
null,如果它可以分配一个值,也可以分配null,这意味着类型具有无论如何没有值。 默认情况下,所有都引用类型,如String,是否可以为
null,但所有值类型,如Int32,不是。

time = item.HospOutDate.HasValue ?
DateTime.Parse(item.HospOutDate.Value.ToString(“yyyy-MM-dd HH:mm:ss”))
: TimeNull ;


C# 和 Visual Basic 中,你可以将值类型作为可以为 null
标记使用?后的值类型的表示法。 例如,int?
C# 或Integer?在 Visual Basic
中声明可以分配的整数值类型null

Nullable<T>结构支持使用值类型为 null
的类型,因为引用类型可以为 null 设计使然。

Nullable类支持互补Nullable<T>结构。 Nullable类支持获取可以为
null 的类型的基础类型,其基础值类型可以为 null
的类型的对比较和相等操作不支持泛型比较和相等性操作。

基本属性

 

两个基本成员Nullable<T>结构不是HasValue和Value属性。 如果HasValue属性Nullable<T>对象是true,可通过访问对象的值Value属性。 如果HasValue属性是false,对象的值是不确定并尝试访问Value属性将引发InvalidOperationException。

装箱和取消装箱

 

可以为
null 的类型进行装箱时,公共语言运行时自动框的基础值Nullable<T>对象,而不Nullable<T>对象本身。也就是说,如果HasValue属性是true的内容Value属性进行装箱。 未装箱可以为
null 的类型的基础值时,公共语言运行时创建一个新Nullable<T>结构初始化为基础的值。

如果HasValue可以为
null 的类型的属性是false,装箱操作的结果是null。 因此,如果装箱可以为
null
的类型传递给需要的对象自变量的方法,该方法必须准备好处理这种情况,其中的参数是null。 当null是取消装箱到可以为
null 的类型,公共语言运行时创建一个新Nullable<T>结构并初始化其HasValue属性false

 

 

 

图片 2

图片 3

  GetUnderlyingType(Type nullableType)方法是用来返回一个可为空类型的基础类型,如果 nullableType 参数不是一个封闭的Nullable<T>泛型,则返回null。 

图片 4

 1     Console.WriteLine(Nullable.GetUnderlyingType(typeof(Nullable<int>)));
 2     //输出结果:System.Int32
 3 
 4     Console.WriteLine(Nullable.GetUnderlyingType(typeof(Nullable<>)) == null);
 5     //输出结果:True
 6 
 7     Console.WriteLine(Nullable.GetUnderlyingType(typeof(int)) == null);
 8     //输出结果:True
 9 
10     Console.WriteLine(Nullable.GetUnderlyingType(typeof(string)) == null);
11     //输出结果:True

 

 

支持
可以分配 的值类型null。 此类不能被继承。

备注

一种类型认为是可以为
null,如果它可以分配一个值,也可以分配null,这意味着类型具有无论如何没有值。 默认情况下,所有都引用类型,如String,是否可以为
null,但所有值类型,如Int32,不是。


C# 和 Visual Basic 中,你可以将值类型作为可以为 null
标记使用?后的值类型的表示法。 例如,int?
C# 或Integer?在 Visual Basic
中声明可以分配的整数值类型null

Nullable类支持互补Nullable<T>结构。 Nullable类支持获取可以为 null
的类型的基础类型,其基础值类型可以为 null
的类型的对比较和相等操作不支持泛型比较和相等性操作。

装箱和取消装箱

 

可以为
null
的类型进行装箱时,公共语言运行时自动框的基础值Nullable<T>对象,而不Nullable<T>对象本身。 也就是说,如果HasValue属性是true的内容Value属性进行装箱。 如果HasValue属性是falsenull进行装箱。 未装箱可以为
null
的类型的基础值时,公共语言运行时创建一个新Nullable<T>结构初始化为基础的值。

 

 

 

 遇到的问题

 图片 5

DataRow 里面 取数据 取出来 Object  如果有值 赋到 模型上,没有就赋 null

字段也为可空的值类型  但就是报错 

 图片 6

在外面定义个对应可空值类型  然后赋值 就解决了

图片 7

 

 图片 8

图片 9

这样也行 图片 10

给Guid 的 空

图片 11

给 int 的空 报错 

 

 

 

 

 

图片 12

 

 

 

无法确定条件表达式的类型,因为“<null>”和“System.DateTime”之间没有隐式转换 解决办法

 

无法确定条件表达式的类型,因为“<null>”和“System.DateTime”之间没有隐式转换—-解决办法

       
当在C#使用可空类型时要注意类型间的一致,出现上述和DateTime无法转换的问题就是没有注意类型间的一致,例如,当给一个可空的时间类型字段赋值时不能使用null,而要使用一个DateTime?
类型。

例子:(报错了)

  public DateTime? time { get; set; }

  time = item.HospOutDate.HasValue ?
DateTime.Parse(item.HospOutDate.Value.ToString(“yyyy-MM-dd HH:mm:ss”)) :
null;

错误提示:无法确定条件表达式的类型,因为“<null>”和“System.DateTime”之间没有隐式转换

 

解决办法:

添加: DateTime? TimeNull = null;

time = item.HospOutDate.HasValue ?
DateTime.Parse(item.HospOutDate.Value.ToString(“yyyy-MM-dd HH:mm:ss”))
: TimeNull ;

 

 图片 13

 

 

 

 

说明: 总结 

可空值类型 是个泛型结构体

图片 14

Nullable<int>

Nullable<Guid>

Nullable<DataTime>

虽然初始值都是 null

但 是不同类型的null

所有不能直接赋  会报错

 

图片 15

 

 

 

 

 

admin

网站地图xml地图