2009-06-02 74 views
0

如何使用F#中的DbCommand.ExecuteScalar?它返回一个我需要转换为int的obj。我对F#很陌生,我需要做的演员还不清楚。F#和ExecuteScalar铸造

let (stockid:uint32) = command.ExecuteScalar() 

Compile Error: 
Type constraint mismatch. The type obj is not compatible with type uint32 

上传使用:?>抛出运行时错误。

+1

不会Convert.ToInt32(...)几乎可以处理任何输入,因此更容易调用? – sisve 2009-06-02 05:55:53

回答

4

如果你只是说

let o : obj = ... 
printfn "%s" (o.GetType().ToString()) 

您能得到什么?它确实是一个整数吗? (int32或uint32还是什么?)

:?>运算符是正确的downcast运算符,但您需要匹配的类型。在转换为实际类型之后,如果需要从一个整型转换为另一个整型,则使用目标类型的相应函数,例如

let x : int = int myUnsignedInt 
// first 'int' is type, second is function to convert-to-int 
+0

假设它是int32,什么是适当的方法来投射对象 - > uint32?你去对象的C#路线 - > int32(essentiall unbox) - > uint32或者F#中有更习惯的方法吗? – JaredPar 2009-06-02 05:28:45

0

如果丧气(?:>)抛出在运行时,你没有得到一个unit32从执行标量返回值。你应该能够转换...

let stockid : uint32 = unit32 command.ExecuteStalar() 

但是,如果你得到的东西不能转换为uint32,那也将失败。 More on casting and converting here

0

尝试将其转换为int32而不是uint32。 ExecuteScalar返回int32的一个对象。