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() )