Могу ли я объединить блок using () {} с параметром метода out?

Учитывая метод

public static bool Connection.TryCreate(out Connection connection) {}

И фрагмент кода вызова:

Connection connection;
if (!Connection.TryCreate(out connection))
    // handle failure gracefully.

/*
 * work with connection
 *
 * …
 *
 */

connection.Dispose();

Я использую тот же шаблон, что и bool.TryParse и друзья, т.е. TryCreate возвращает, была ли операция успешной.

Я понимаю, что переменная using () должна быть доступна только для чтения в своем блоке, но есть способ превратить указанное выше в с помощью () {} block ( TryCreate устанавливает его только один раз), например:

using (Connection connection)
{
    if (!Connection.TryCreate(out connection))
        // this would leave the using() block prematurely

    /*
     * work with sconnection
     *
     * …
     *
     */
}

(Это не компилируется:

ошибка CS1657: невозможно передать 'соединение' в качестве аргумента ref или out, потому что это 'using переменная '

)

11
задан Sören Kuklau 19 November 2011 в 18:33
поделиться