2016-09-23 9 views
2

일부 C# 코드를 검토 중이므로 C#으로 작업한지 얼마되지 않아서 본능이 정확한지 확인하고 싶습니다. 나의 실패를 통해 다시 몇 년을보고, 나는이이 연구의 조금 짓을 지금C#을 사용하여 clear dispose

using(StreamWriter thing = new StreamWriter()) { 

    DataSet DS = SQLQueryMethod(); 
    do stuff to DS and log that stuff to the a log file using thingy... 

    DS.clear(); 
    DS.Dispose(); 
} 

:이 코드에서 나는 다음과 같은 일이 이루어집니다 사용하여 블록 내부 장소의 수를 볼 수 기억이 더 좋을 것이라고 생각합니다. 나는 더 "표준"/ "최고의 협동 조합"방법 인 것을 알고 싶다. 아래 번호 1이 최선의 방법이라고 생각합니다.

미리 감사드립니다.

  1. 는 명확하고 처리 모두에 대한 필요성을 제거, 그것은 using 문의 범위의 종료와 함께 자동 폐기됩니다 있도록하여 문에 데이터 집합을 추가합니다. 나는 이런 짓을 했을까 : 나는 그냥 전에 처분에 취소하는 것은 쓸모없는 생각 때문에

    using(StreamWriter thing = new StreamWriter(), DataSet DS = new DataSet()) { 
    
        DS = SQLQueryMethod() 
        do stuff to DS{...} 
    
    } 
    
  2. 그냥 데이터 집합 DS에 Dispose를 호출해야합니다.

  3. 실제로 원래 방법대로 수행해야합니다. "문을 사용하여"

+0

이 질문은 아마 속한 http://codereview.stackexchange.com하지만, 그래, 그래, 그래 귀하의 질문에 대답,하지만 난 아직도 당신이 필요하다고 생각합니다 2 seperate usings –

+0

같은 객체를 인스턴스화하는 메소드에서'.Dispose()'를 발견하자마자, 나는 항상 그것을 사용하는 패턴으로 다시 작성하는 방법을 보지 않고 거의 항상 쉽습니다. –

+0

하나의 using 문에 여러 항목을 추가하는 대신 여러 개의 using 문으로 여러 답변을 볼 수 있습니다. 차이점이 있습니까? 예 : 사용 (itemA, itemB)를 처분 전화는 기술적으로 사용하여 내부에 있기 때문에 (itemB가) { } –

답변

6

여러는 다음과 같이 사용할 수 있습니다으로 IDisposable 인터페이스의

using (StreamWriter thing = new StreamWriter()) 
using (DataSet DS = new DataSet()) 
{ 
    DS = SQLQueryMethod(); 
    //do stuff .... 
} 

는 StreamWriter를하고 데이터 집합이 필요한 폐기 (구현하므로) 방법, 필요가 명시 적으로

+4

한 줄을 저장하려면'using (DataSet DS = SQLQueryMethod())'를 사용하십시오. –

+2

모든 사람들이 답변에서 새 DataSet()을 선언하는 이유는 무엇입니까? 'using' 문은 원래 참조를 유지하지 않습니까? – flakes

+2

@flkes - 나는 그것을 얻지 못한다 - 이것은 컴파일되지 않을 것이다 :) –

0
이후에 호출 없습니다

올바른 방법은 IDisposable - like를 구현하는 모든 것을 처리하는 것입니다.

using (var thing = new StreamWriter()) 
using (var ds = SQLQueryMethod()) 
{ 
    do stuff to DS {} 
} 

기타 답변이 잘못 제안

using(StreamWriter thing = new StreamWriter()) 
using(DataSet DS = new DataSet()) 
{ 
    // this won't compile - DS is in using so it is a read-only variable 
    DS = SQLQueryMethod() 
    do stuff to DS{...} 
} 

참조 : Why is a variable declared in a using statement treated as readonly?

+0

질문은 usings 및 IDisposable 사용에 관한 것입니다. – alexqc