今天我与向量作斗争,我遇到了这个问题。我必须反转 Y 向量值,但每次我编译时,编译器都会抱怨:
语法错误“,”预期
vector = new Vector3((float) ((-256 + ((iD & 7) * 0x40)) + 0x20), (float) ((-512 + ((iD / 8) * 0x40)) + 0x20), -200f) {
Y = -vector.Y; //error shows here at the semicolon
};
今天我与向量作斗争,我遇到了这个问题。我必须反转 Y 向量值,但每次我编译时,编译器都会抱怨:
语法错误“,”预期
vector = new Vector3((float) ((-256 + ((iD & 7) * 0x40)) + 0x20), (float) ((-512 + ((iD / 8) * 0x40)) + 0x20), -200f) {
Y = -vector.Y; //error shows here at the semicolon
};
您正在使用对象初始值设定项语法。
编译器是正确的。
如果要初始化多个属性,则应在此处放置一个逗号,而不是分号。即使在最后一个属性被初始化之后,逗号也是合法的,但分号是不合法的。
所以以下两种都可以:
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);