0

我无法从十进制转换为十六进制。

这是我的代码:

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")} 

但它给了我另一个错误。

我该如何解决它,或者它确实有另一种方法来解决它。

4

1 回答 1

2

显然,MessageID可以是DBNull。最简单的解决方案是将值读取为可为的int(以防止发生转换错误)。如果您使用Field可空类型,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")
于 2012-09-26T08:10:37.270 回答