可空值类型
Int32,不是。
例如,int?在 C# 或Integer?在 Visual Basic 中声明可以分配的整数值类型null。
<T>结构支持使用值类型为 null 的类型,因为引用类型可以为 null 设计使然。
Nullable类支持获取可以为 null 的类型的基础类型,其基础值类型可以为 null 的类型的对比较和相等操作不支持泛型比较和相等性操作。
InvalidOperationException。
<T>结构初始化为基础的值。
<T>结构并初始化其HasValue属性false。
GetUnderlyingType(Type nullableType)方法是用来返回一个可为空类型的基础类型,如果 nullableType 参数不是一个封闭的Nullable<T>泛型,则返回null。
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
此类不能被继承。
Int32,不是。
例如,int?在 C# 或Integer?在 Visual Basic 中声明可以分配的整数值类型null。
Nullable类支持获取可以为 null 的类型的基础类型,其基础值类型可以为 null 的类型的对比较和相等操作不支持泛型比较和相等性操作。
Nullable<T>结构初始化为基础的值。
遇到的问题
DataRow 里面 取数据 取出来 Object 如果有值 赋到 模型上,没有就赋 null
字段也为可空的值类型 但就是报错
在外面定义个对应可空值类型 然后赋值 就解决了
这样也行
给Guid 的 空
给 int 的空 报错
无法确定条件表达式的类型,因为“<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 ;
说明: 总结
可空值类型 是个泛型结构体
Nullable<int>
Nullable<Guid>
Nullable<DataTime>
虽然初始值都是 null
但 是不同类型的null
所有不能直接赋 会报错
https://www.cnblogs.com/tdfblog/p/Nullable-Types-in-Csharp-Net.html#h7
无法确定条件表达式的类型,因为“<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 ;