0

今天我与向量作斗争,我遇到了这个问题。我必须反转 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
 }; 
4

1 回答 1

2

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

编译器是正确的。

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

所以以下两种都可以:

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);
于 2015-06-01T21:19:53.533 回答