2009-06-02 111 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的一個對象。