f# keyword use and using

前端 未结 2 1063
面向向阳花
面向向阳花 2020-12-15 20:12

I am trying to use System.Data.Sqlite with F#. In C#, I have code like

 using (DbTransaction dbTrans = con.BeginTransaction()) {
     using (SQ         


        
相关标签:
2条回答
  • 2020-12-15 20:21

    in f# it's

    use dbTrans = new con.BeginTransaction ()
    

    and

    use cmd = con.CreateCommand()
    

    these will dispose when your function ends

    0 讨论(0)
  • 2020-12-15 20:36

    To add some details - if you need to explicitly mark the scope where command is valid (to get exactly the same behavior as in your C# example, where cmd id disposed of before calling Commit) you can write:

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

    The scope is just a part of expression where the symbol is defined, so you can make it explicit using parentheses.

    using is just an F# function that you could use before special syntax using use was added. Just FYI, the syntax looks like this:

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

    Writing the code using use is definitely a better idea (but you can define your functions like using to encapsulate more interesting behavior - e.g. transaction).

    0 讨论(0)
提交回复
热议问题