Нет, разница есть.
Инициализатор объекта присваивает переменной только после все свойства. Другими словами, это:
Foo x = new Foo { Bar = "Baz" };
эквивалентно:
Foo tmp = new Foo();
tmp.Bar = "Baz";
Foo x = tmp;
Это означает, что если в вашем случае один из установщиков свойств вызовет исключение, объект не будет удален.
РЕДАКТИРОВАТЬ: Как я и думал ... попробуйте это:
using System;
public class ThrowingDisposable : IDisposable
{
public string Name { get; set; }
public string Bang { set { throw new Exception(); } }
public ThrowingDisposable()
{
Console.WriteLine("Creating");
}
public void Dispose()
{
Console.WriteLine("Disposing {0}", Name);
}
}
class Test
{
static void Main()
{
PropertiesInUsingBlock();
WithObjectInitializer();
}
static void PropertiesInUsingBlock()
{
try
{
using (var x = new ThrowingDisposable())
{
x.Name = "In using block";
x.Bang = "Ouch";
}
}
catch (Exception)
{
Console.WriteLine("Caught exception");
}
}
static void WithObjectInitializer()
{
try
{
using (var x = new ThrowingDisposable
{
Name = "Object initializer",
Bang = "Ouch"
})
{
// Nothing
}
}
catch (Exception)
{
Console.WriteLine("Caught exception");
}
}
}
Выход:
Creating
Disposing In using block
Caught exception
Creating
Caught exception
Обратите внимание, что нет строки «Утилизация инициализатора объекта».