No son bastante equivalente - al menos no en el caso general. El código utilizando un inicializador de objeto está más cerca de este:
Position tmp = new Position();
tmp.x = 3;
tmp.y = 4;
Position position1 = tmp;
En otras palabras, la asignación a la variable sólo se produce después de las propiedades se han establecido. Ahora, en el caso de que esté declarando una nueva variable local, eso en realidad no importa, y el compilador puede optimizar su primer formulario. Pero, lógicamente, sí importa. Considere:
Position p1 = new Position { x = 10, y = 20 };
p1 = new Position { x = p1.y, y = p1.x };
Si eso hicieron la tarea de p1
primera, acabaría con 0 tanto para p1.x
y p1.y
. Mientras que eso es realmente equivalente a:
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;
EDIT: Me acabo de dar cuenta de que estás usando una estructura en lugar de una clase.Eso puede hacer algunas diferencias sutiles ... pero es casi seguro que no deberías estar usando una estructura mutable para empezar :)
Mucha verdad a eso. Publicé mi respuesta ... vi su respuesta, la edité para señalar su respuesta. –
Jon Skeet parece responder todas las preguntas de este sitio :) No puedo esperar a leer su nuevo libro (si alguna vez lo publica realmente) – Bryan