C# 当反转Vector3值时,编译器会抱怨语法

C# 当反转Vector3值时,编译器会抱怨语法,c#,vector,syntax-error,expected-exception,C#,Vector,Syntax Error,Expected Exception,今天我在与向量作斗争,我在这方面遇到了问题。我必须反转Y向量值,但每次编译时,编译器都会抱怨: 语法错误,应为“” 您正在使用对象初始值设定项语法 编译器是正确的 如果要初始化多个属性,可以在此处放置逗号,而不是分号。即使在初始化最后一个属性之后,逗号也是合法的,但分号是不合法的 因此,以下两项中的任何一项都可以: vector = new Vector3((float) ((-256 + ((iD & 7) * 0x40)) + 0x20), (float) ((-512 + ((iD

今天我在与向量作斗争,我在这方面遇到了问题。我必须反转Y向量值,但每次编译时,编译器都会抱怨:

语法错误,应为“”


您正在使用对象初始值设定项语法

编译器是正确的

如果要初始化多个属性,可以在此处放置逗号,而不是分号。即使在初始化最后一个属性之后,逗号也是合法的,但分号是不合法的

因此,以下两项中的任何一项都可以:

vector = new Vector3((float) ((-256 + ((iD & 7) * 0x40)) + 0x20), (float) ((-512 + ((iD / 8) * 0x40)) + 0x20), -200f) {
   Y = vector.Y
 }; 

vector = new Vector3((float) ((-256 + ((iD & 7) * 0x40)) + 0x20), (float) ((-512 + ((iD / 8) * 0x40)) + 0x20), -200f) {
   Y = vector.Y,
 }; 
话虽如此,这只会让编译器满意。你到底想干什么

请注意,在读取
vector.Y
时,
vector
变量尚未指定新值,因此您正在读取旧值

基本上,代码是这样做的:

var temp = = new Vector3((float) ((-256 + ((iD & 7) * 0x40)) + 0x20), (float) ((-512 + ((iD / 8) * 0x40)) + 0x20), -200f);
temp.Y = vector.Y;
vector = temp;
为什么不直接通过构造函数来赋值呢

vector = new Vector3((float) ((-256 + ((iD & 7) * 0x40)) + 0x20), vector.Y, -200f);

您的
Y
变量声明为什么?我不知道您可以在初始值设定项的最后一个属性后面加逗号。谢谢你的信息!允许这样做是为了使生成的代码更容易避免在最后一个值后不放置逗号。这在数组和集合初始值设定项中也是合法的。谢谢你,我没有注意到这一点。我还有其他问题。我必须问一个新问题吗?
vector = new Vector3((float) ((-256 + ((iD & 7) * 0x40)) + 0x20), vector.Y, -200f);