Для метода
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()
должна быть доступна только для чтения в своем блоке, но есть способ превратить это в блок using() {}
(TryCreate
устанавливает его только один раз), например:
using (Connection connection)
{
if (!Connection.TryCreate(out connection))
// this would leave the using() block prematurely
/*
* work with sconnection
*
* …
*
*/
}
(Это не скомпилировано:
ошибка CS1657: не может передать "соединение" в качестве аргумента ref или out, потому что это "использование переменной"
)