f#关键字使用和使用

时间:2011-02-11 20:38:49

标签: f#

我正在尝试将System.Data.Sqlite与F#一起使用。在C#中,我有像

这样的代码
 using (DbTransaction dbTrans = con.BeginTransaction()) {
     using (SQLiteCommand cmd = con.CreateCommand()) {
         //blahblah
     }
     dbTrans.Commit();
 }

但是在F#中,当我使用上面类似的两个using时,我得到the type bool is not compatible with the type IDisposable的错误... 编辑我真的很抱歉我的问题。 use适用于F#案例。我只是不知道如何关闭/删除我的问题。

2 个答案:

答案 0 :(得分:15)

添加一些细节 - 如果您需要明确标记命令有效的范围(以获得与C#示例完全相同的行为,在调用cmd之前处理Commit id的位置)你可以写:

use dbTrans = con.BeginTransaction()
( use cmd = con.CreateCommand()
  cmd.BlahBlahBlah() )
dbTrans.Commit()

范围只是定义符号的表达式的一部分,因此您可以使用括号将其显式化。

using只是一个F#函数,您可以在添加use的特殊语法之前使用它。仅供参考,语法如下:

using (con.BeginTransaction()) (fun dbTrans ->
  using (con.CreateCommand()) (fun cmd ->
    cmd.BlahBlahBlah() )
dbTrans.Commit() )

使用use编写代码绝对是一个更好的主意(但您可以定义像using这样的函数来封装更有趣的行为 - 例如事务)。

答案 1 :(得分:9)

在f#中

use dbTrans = new con.BeginTransaction ()

use cmd = con.CreateCommand()

这些将在你的功能结束时处理