2011-02-11 6 views
14

System.Data.Sqlite을 F #과 함께 사용하려고합니다. 내가 the type bool is not compatible with the type IDisposable의 오류 ... 내 질문에 대한 정말 죄송 편집있어 위에 나는 비슷한 두 using를 사용할 때 C#에서, 나는, f # 키워드 사용 및 사용

using (DbTransaction dbTrans = con.BeginTransaction()) { 
    using (SQLiteCommand cmd = con.CreateCommand()) { 
     //blahblah 
    } 
    dbTrans.Commit(); 
} 

그러나 F 번호에

같은 코드가 있습니다. use은 F # 케이스에서 작동합니다. 나는 단지 내 quesetions를 닫거나 삭제하는 방법을 모른다. 당신이 명령이 유효한 경우 범위를 표시 명시 적으로해야하는 경우 - F #의

+4

정말 질문을 삭제해야할지 모르겠습니다. 그것은 나쁜 질문이 아닙니다 : 그것은 upvote와 두가지 괜찮은 대답을 가지고 있습니다. – Benjol

답변

8

은 당신의 기능이 몇 가지 세부 사항을 추가하려면

15

종료 될 때 이러한 처리됩니다

use dbTrans = new con.BeginTransaction() 

use cmd = con.CreateCommand() 

입니다 (cmd ID가 Commit을 호출하기 전에 처리 된 C# 예제에서와 똑같은 동작을 얻으려면 다음과 같이 작성할 수 있습니다.

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

범위는 기호가 정의 된 표현의 일부일 뿐이므로 괄호를 사용하여 명시 적으로 지정할 수 있습니다.

usinguse을 사용하여 특수 구문을 사용하기 전에 사용할 수있는 F # 함수입니다. 그냥 참고로, 구문은 다음과 같습니다

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

use 확실히 더 나은 아이디어를 사용하여 코드 작성 (하지만 더 재미있는 동작을 캡슐화하는 using처럼 함수를 정의 할 수 있습니다 - 예를 들어, 트랜잭션).