Они не вполне эквивалентны - по крайней мере, не в общем случае.Код, использующий инициализатор объекта, ближе к этому:
Position tmp = new Position();
tmp.x = 3;
tmp.y = 4;
Position position1 = tmp;
Другими словами, присвоение переменной происходит только после свойства были установлены.Теперь в случае, когда вы объявляете новую локальную переменную, это на самом деле не имеет значения, и компилятор вполне может оптимизировать вашу первую форму.Но по логике это имеет значение.Рассмотрим:
Position p1 = new Position { x = 10, y = 20 };
p1 = new Position { x = p1.y, y = p1.x };
Если бы это сделало присваивание p1
first , вы бы получили 0 для p1.x
и p1.y
.В то время как на самом деле это эквивалентно:
Position tmp = new Position();
tmp.x = 10;
tmp.y = 20;
Position p1 = tmp;
tmp = new Position();
tmp.x = p1.y; // 20
tmp.y = p1.x; // 10
p1 = tmp;
РЕДАКТИРОВАТЬ: я только что понял, что вы используете структуру, а не класс.Это может иметь некоторые тонкие различия ... но вы почти наверняка не должны использовать изменяемую структуру для начала:)