2013-01-16 3 views
0

당신은 같은 것을 수행 할 수 있습니다C#의 using 문에서 여러 값 사용? 파이썬에서

with open('filename') as f, something_else(f) as thing: 
    do_thing(thing) 

을 그리고 그것은 open 비트, 다음 something_else 비트를 할 것입니다. 블록이 종료되면 역순으로 "처분"합니다.

using (var cmd = new DB2Command(...)){ 
    using (var rdr = cmd.ExecuteReader()){ 
     // Magic super-duper-top-secret-code-here 
    } 
} 

내가 하나 using 문에 cmdrdr을 결합 할 수있는 방법이 있나요 :

는 지금은이 같은 일부 C# 코드있어?

답변

4

두 개체가 같은 유형을 공유하고 여기에없는 경우에만이 작업을 수행 할 수 있습니다. 거기에 당신이 외부 using에 괄호를 사용하기 위해 필요 없습니다, 그리고 코드가없는 청소기 보이는 것을

참고 :

using (var cmd = new DB2Command(...)) 
using (var rdr = cmd.ExecuteReader()) 
{ 
    // Magic super-duper-top-secret-code-here 
} 

개체가 동일한 유형의 둘 경우에 당신은이 작업을 수행 할 수 있습니다

using(FileStream stream1 = File.Open("", FileMode.Open) 
    , stream2 = File.Open("", FileMode.Open)) 
{ 
} 
+0

위대한 마음은 비슷하게 생각합니다. ;-) +1 – Steven

+0

@Steven @Steven 널리 사용되는 패턴입니다. – Servy

+0

당신은 위대한 마음을 선호하지 않습니까? ;-) – Steven

2

이 작업을 수행 할 수 있습니다 그것을 얻을 것이다 가장 좋은

using (var cmd = new DB2Command(...)) 
using (var rdr = cmd.ExecuteReader()) 
{ 
    // Magic super-duper-top-secret-code-here 
} 

합니다.

0

그래서 내가 사용하여 사용하지 않는 뭔가를 시도 할 것이다 ...

public void processDisposables<T1, T2>(T1 type1, T2 type2, Action<T1, T2> action) 
     where T1: IDisposable 
     where T2: IDisposable { 

      try { 
       action(type1, type2); 
      } finally { 
       type1.Dispose(); 
       type2.Dispose(); 
      } 
    } 

그것은 미국의 ge :

processDisposables(new MemoryStream(), new StringReader("Frank Borland is 112"), (m, s) => { 
     m.Seek(0, SeekOrigin.End); 
     // other stuff with IDisposables 
    });