f # использование и использование ключевых слов - PullRequest
15 голосов
/ 11 февраля 2011

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

Ответы [ 2 ]

15 голосов
/ 12 февраля 2011

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

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, для инкапсуляции более интересного поведения - например, транзакции).

9 голосов
/ 12 февраля 2011

в ф # это

use dbTrans = new con.BeginTransaction ()

и

use cmd = con.CreateCommand()

они утилизируются, когда ваша функция заканчивается

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...