Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
f#关键字的使用和使用_F# - Fatal编程技术网

f#关键字的使用和使用

f#关键字的使用和使用,f#,F#,我正在尝试将System.Data.Sqlite与F#一起使用。在C#中,我有如下代码 using (DbTransaction dbTrans = con.BeginTransaction()) { using (SQLiteCommand cmd = con.CreateCommand()) { //blahblah } dbTrans.Commit(); } 但是在F#中,当我使用上面使用的类似的两个时,我得到的错误是类型bool与类型

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

 using (DbTransaction dbTrans = con.BeginTransaction()) {
     using (SQLiteCommand cmd = con.CreateCommand()) {
         //blahblah
     }
     dbTrans.Commit();
 }
但是在F#中,当我使用上面使用的类似的两个
时,我得到的错误是
类型bool与类型IDisposable不兼容
。。。 编辑我真的很抱歉我的问题<代码>使用
在F#情况下有效。我只是不知道如何关闭/删除我的任务集。

在f#中是


这些将在函数结束时处理,以添加一些详细信息-如果需要显式标记命令有效的范围(以获得与C#示例中完全相同的行为,其中
cmd
id在调用
Commit
之前处理),可以编写:

use dbTrans = con.BeginTransaction()
( use cmd = con.CreateCommand()
  cmd.BlahBlahBlah() )
dbTrans.Commit()
作用域只是定义符号的表达式的一部分,因此可以使用括号将其显式化

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

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

使用
use
编写代码肯定是一个更好的主意(但是你可以定义你的函数,比如
使用
来封装更有趣的行为,例如事务)。

我不知道你是否真的需要删除这个问题。这是一个不错的问题:它得到了一张赞成票,还有两个像样的答案。
use dbTrans = con.BeginTransaction()
( use cmd = con.CreateCommand()
  cmd.BlahBlahBlah() )
dbTrans.Commit()
using (con.BeginTransaction()) (fun dbTrans ->
  using (con.CreateCommand()) (fun cmd ->
    cmd.BlahBlahBlah() )
dbTrans.Commit() )