Учитывая метод
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 переменная '
)