工作总结 无法确定条件表达式的类型,因为“”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable (可空类型)

时间:2023-01-13 03:38:58

可空值类型

工作总结 无法确定条件表达式的类型,因为“”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable (可空类型)

 

备注
 
 

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

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

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

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

两个基本成员Nullable<T>结构不是HasValueValue属性。 如果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

 

 

 

工作总结 无法确定条件表达式的类型,因为“”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable (可空类型)

Nullable 类    应该是提供几个可供  值类型null  操作的(支持可为其分配) 方法

工作总结 无法确定条件表达式的类型,因为“”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable (可空类型)

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

工作总结 无法确定条件表达式的类型,因为“”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable (可空类型)
 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>结构初始化为基础的值。

 

 

 

 遇到的问题

 工作总结 无法确定条件表达式的类型,因为“”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable (可空类型)

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

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

 工作总结 无法确定条件表达式的类型,因为“”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable (可空类型)

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

工作总结 无法确定条件表达式的类型,因为“”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable (可空类型)

 

 工作总结 无法确定条件表达式的类型,因为“”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable (可空类型)

工作总结 无法确定条件表达式的类型,因为“”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable (可空类型)

这样也行 工作总结 无法确定条件表达式的类型,因为“”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable (可空类型)

给Guid 的 空

工作总结 无法确定条件表达式的类型,因为“”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable (可空类型)

给 int 的空 报错 

 

 

 

 

 

工作总结 无法确定条件表达式的类型,因为“”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable (可空类型)

 

 

 

无法确定条件表达式的类型,因为“<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 ;

 

 工作总结 无法确定条件表达式的类型,因为“”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable (可空类型)

 

 

 

 

说明: 总结 

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

工作总结 无法确定条件表达式的类型,因为“”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable (可空类型)

Nullable<int>

Nullable<Guid>

Nullable<DataTime>

虽然初始值都是 null

但 是不同类型的null

所有不能直接赋  会报错

 

工作总结 无法确定条件表达式的类型,因为“”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable (可空类型)

 

 

 

 https://www.cnblogs.com/tdfblog/p/Nullable-Types-in-Csharp-Net.html#h7