如何使用F#中的DbCommand.ExecuteScalar?它返回一个我需要转换为int的obj。我对F#很新,我需要做的演员不清楚。
let (stockid:uint32) = command.ExecuteScalar()
Compile Error:
Type constraint mismatch. The type obj is not compatible with type uint32
使用上传:?>抛出运行时错误。
答案 0 :(得分:4)
如果你只是说
let o : obj = ...
printfn "%s" (o.GetType().ToString())
你得到了什么?它确实是一个int吗? (int32或uint32还是什么?)
:?> operator是正确的向下转换运算符,但您需要匹配的类型。在转换为实际类型后,如果需要从一个整数类型转换为另一个整数类型,则使用相应的函数作为目标类型,例如
let x : int = int myUnsignedInt
// first 'int' is type, second is function to convert-to-int
答案 1 :(得分:0)
如果Downcast(:?>)在运行时抛出,则不会从Execute Scalar获取unit32作为返回值。你应该能够转换......
let stockid : uint32 = unit32 command.ExecuteStalar()
但如果你得到一些无法转换为uint32的东西,那也会失败。More on casting and converting here。
答案 2 :(得分:0)
尝试将其转换为int32而不是uint32。 ExecuteScalar返回int32的对象。