You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

结构体变量是否允许被多次重新赋值?附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 这类结构体的公共字段(比如 xy),你甚至可以直接修改字段值,不需要重新赋值整个结构体,比如:

b.x = 3;
b.y = b.y * 2;

这也是值类型结构体的特性,和类的引用类型有本质区别。

总结

回到你的核心问题:readonly 修饰的结构体变量,允许被多次重新赋值,你完全可以放心修改你初始化的那四个 Vector2 变量的值。

内容的提问来源于stack exchange,提问作者deanrihpee

火山引擎 最新活动