结构体变量是否允许被多次重新赋值?附Vector2结构体代码场景
关于C#结构体变量的多次赋值问题
嘿,针对你的问题,直接给你明确结论:在C#中(你用到的Unity Vector2 就是典型的结构体值类型),普通的结构体变量是完全允许被多次重新赋值的——除非你给变量加上了 readonly 修饰符。
结合你给出的代码例子,我再详细拆解说明:
1. 普通结构体变量的赋值规则
你代码里的这些变量:
var center = Vector2.Zero; var b = new Vector2(center.x, center.y); // 你提到的四个Vector2变量之一
都是未被 readonly 修饰的普通结构体变量,后续完全可以随时重新赋值,比如:
// 给center重新赋值 center = new Vector2(15, 25); // 给b重新赋值 b = Vector2.one; b = new Vector2(b.x + 10, b.y - 5);
这些操作都是合法的,编译器不会报错。
2. 只读结构体变量的限制
你注释里提到 size 变量初始化后类似只读——如果这个变量被标记为 readonly(比如 readonly float size = 1F;),那它确实只能在声明时或者类的构造函数里赋值,后续无法修改。但注意:readonly 是修饰变量的,不是结构体本身,所以如果只是结构体类型的变量没加 readonly,就不受这个限制。
另外补充一个细节:像 Vector2 这类结构体的公共字段(比如 x、y),你甚至可以直接修改字段值,不需要重新赋值整个结构体,比如:
b.x = 3; b.y = b.y * 2;
这也是值类型结构体的特性,和类的引用类型有本质区别。
总结
回到你的核心问题:非 readonly 修饰的结构体变量,允许被多次重新赋值,你完全可以放心修改你初始化的那四个 Vector2 变量的值。
内容的提问来源于stack exchange,提问作者deanrihpee




