Ils ne sont pas tout à fait équivalent - au moins pas dans le cas général. Le code à l'aide d'un initialiseur d'objet est plus proche de ceci:
Position tmp = new Position();
tmp.x = 3;
tmp.y = 4;
Position position1 = tmp;
En d'autres termes, l'affectation à la variable se produit uniquement après les propriétés ont été définies. Maintenant dans le cas où vous êtes de déclarer une nouvelle variable locale, qui n'a pas de réelle importance, et le compilateur peut bien optimiser votre premier formulaire. Mais, logiquement, il n'importe. Considérer:
Position p1 = new Position { x = 10, y = 20 };
p1 = new Position { x = p1.y, y = p1.x };
Si cela n'est que la cession p1
d'abord, vous finirais avec 0 pour les deux p1.x
et p1.y
. Alors que c'est en fait équivalent à:
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: je viens de réalisé que vous êtes en utilisant une structure plutôt qu'une classe. Que peut faire quelques subtiles différences... mais vous avez presque certainement ne devriez pas être à l'aide d'une mutable struct pour commencer :)