0

Pythonでは、次のようなことができます。

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

そしてそれはopenビットを実行し、次にビットを実行しsomething_elseます。ブロックが終了すると、逆の順序で「破棄」されます。

今、私はこのようないくつかのC#コードを持っています:

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

cmd組み合わせてrdr1つのusingステートメントにする方法はありますか?

4

3 に答える 3

4

これを行うことができるのは、2 つのオブジェクトが同じ型を共有していて、それらがここにない場合のみです。

outer で中かっこを使用する必要はなく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))
{
}
于 2013-01-16T15:43:35.330 に答える
2

あなたはこれを行うことができます:

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

それはそれが得る最高のものです。

于 2013-01-16T15:42:59.907 に答える
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();
            }
    }

そしてそれは使用法です:

    processDisposables(new MemoryStream(), new StringReader("Frank Borland is 112"), (m, s) => {
        m.Seek(0, SeekOrigin.End);
        // other stuff with IDisposables
    });
于 2013-01-16T15:54:42.897 に答える