Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
using (var reader = ...) // Получаем DataReader
using (var person = new Person
{
Id = (int)reader["id"],
Name = (string)reader["name"], // падает индексатор
})
{
}
using? Кода становится больше максимум на пару-тройку строк, а скорее всего останется столько же. По-моему, этот инициализатор объекта, да ещё и вместе using, да ещё если и не один объект создаётся составляют нечитаемую конструкцию.long position = -1;
var tmpFile = new FileStream("d:\\1.txt", FileMode.OpenOrCreate);
try
{
tmpFile.Position = position;
var file = tmpFile;
//....
}
finally
{
if (tmpFile != null)
((IDisposable)tmpFile).Dispose();
}
file должна определяться всегда внутри try, а конструкция using должна всегда использовать сгенерированную компилятором переменную для вызова Dispose. Тогда все выглядит вполне сладко и надежно. Поправьте, если я ошибаюсь.using(new A("a")
{
B=1
})
{
//какой-то код
}
using(var a=new A("a"))
{
a.B=1;
//какой-то код
}
IFile CreateFile()
{
var file = new File();
try
{
//… код, который может вызывать Exception
return file;
}
catch(Exception)
{
file.Close();
throw;
}
}
Инициализаторы объектов в блоке using