我无法从十进制转换为十六进制。
这是我的代码:
select new
{
MessageID = table1.Field<Int32?>("MessageID"),
MessageIDHex = (String)table1.Field<Int32>("MessageID").ToString("X")
}
它给了我错误
与 DBNUll.Value 不能更改为 System.In32
所以我试过了
MessageIDHex= (String)table1.Field<Int32?>("MessageID").ToString("X")}
但它给了我另一个错误。
我该如何修复它,或者它确实有另一种解决方法。
显然
,MessageID
可以是DBNull。最简单的解决方案是将值读取为可为 null 的 int(以防止发生转换错误)。如果将 Field
与可为 null 的类型一起使用,则DBNull
将自动转换为 null
,然后可以使用 ??
运算符将其强制转换为 0:
MessageIDHex = (table1.Field<Int32?>("MessageID") ?? 0).ToString("X")
或者,如果您愿意,可以让数据库中的 DBNull 值生成空字符串或空字符串MessageIDHex
:
MessageIDHex = table1.IsNull("MessageID") ? "" : table1.Field<Int32>("MessageID").ToString("X")
MessageIDHex = table1.IsNull("MessageID") ? null : table1.Field<Int32>("MessageID").ToString("X")