Использование ключевого слова f # и использование

Я пытаюсь использовать System.Data.Sqlite с F #. В С# у меня есть код типа

 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... EDIT Мне очень жаль моего вопроса. use будет работать в случае F #. Я просто не знаю, как закрыть/удалить мои вопросы.

Ответы

Ответ 1

в f # it

use dbTrans = new con.BeginTransaction ()

и

use cmd = con.CreateCommand()

они будут уничтожены, когда ваша функция закончится

Ответ 2

Чтобы добавить некоторые детали - если вам нужно явно указать область действия, где команда действительна (чтобы получить то же поведение, что и в примере на С#, где cmd id удален до вызова Commit), вы можете написать:

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

Область видимости - это только часть выражения, где символ определен, поэтому вы можете сделать его явным с помощью круглых скобок.

using - это просто функция F #, которую вы могли бы использовать до того, как был добавлен специальный синтаксис с использованием use. Просто FYI, синтаксис выглядит следующим образом:

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

Написание кода с помощью use определенно является лучшей идеей (но вы можете определить свои функции, такие как using, чтобы инкапсулировать более интересное поведение - например, транзакцию).