我是F#的新手,試着先潛水,然後再做更正式的介紹。我有以下代碼:如何使用F#中的IDataReader字符串索引?
3210我計劃yield語句來代替循環體和清理的代碼。但現在我只是試圖通過調試代碼和查看數據讀取器來確保數據訪問的工作。目前我收到System.InvalidCastException
。當我把一個斷點通過上面的註釋行指示的點,然後在不久的窗戶reader["name"]
型我從數據庫中獲取一個有效的值,所以我知道它連接到數據庫確定。但是,如果我嘗試將reader["name"]
(而不是reader.["name"]
)放在源文件中,我會得到「此值不是函數並且無法應用」消息。
爲什麼我可以在即時窗口使用reader["name"]
,但不能在我的fsharp代碼中使用?我如何在閱讀器上使用string indexing?
更新
繼傑克P.的意見,我打出了代碼分成幾行,現在我看到那裏發生的錯誤:
let id = reader.["id"]
let id_unboxed = unbox id // <--- error on this line
id
有根據的類型object {long}
調試器。
這很有幫助。 'let id_unboxed = unbox id'這一行有錯誤。在調試器中查看'id'的類型,它顯示'object {long}'。在直接窗口中,'id is long'返回true,而'id is int'則返回false。所以我猜測它與int vs long casting有關。將進一步試驗。 – User 2013-03-06 21:39:38
@User如果它是'long',那麼你需要將它作爲'int64'(F#語法用於'long')。我認爲你需要將它解包到正確的類型('int64')*然後*將它轉換爲一個'int'(如果這是你所需要的) - 你不能直接解開它(這會導致錯誤,現在重新看到)。 – 2013-03-06 22:04:28
如果我改變我的人類類型使用'int64'而不是'int'它的作品。不知道爲什麼它只是從數據庫拉ID。 – User 2013-03-06 22:10:36