0

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 

:?>を使用したアップキャストは、ランタイムエラーをスローします。

4

3 に答える 3

4

あなたが言うだけなら

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

何がもらえますか?それは確かにintですか?(int32またはuint32または何?)

:?>演算子は正しいダウンキャスト演算子ですが、タイプを一致させる必要があります。実際の型にキャストした後、ある積分型から別の積分型に変換する必要がある場合は、宛先型に対応する関数を使用します。

let x : int = int myUnsignedInt  
// first 'int' is type, second is function to convert-to-int
于 2009-06-02T05:27:13.517 に答える
0

実行時にダウンキャスト(:?>)がスローされた場合、ExecuteScalarからの戻り値としてunit32を取得していません。あなたは変換することができるはずです...

let stockid : uint32 = unit32 command.ExecuteStalar()

ただし、uint32に変換できないものを取得している場合は、それも失敗します。キャストと変換の詳細については、こちらをご覧ください

于 2009-06-02T05:28:46.667 に答える
0

uint32ではなくint32にキャストしてみてください。ExecuteScalarは、int32のオブジェクトを返します。

于 2009-06-02T05:29:36.480 に答える