You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity C#中为何无法用=通过其他变量给字段赋值,用=>却可行?

报错核心原因

这是C#固有语法限制,和Unity引擎本身无关:

  • C#中字段初始化器(声明字段时直接写= 初始值的语法)的执行时机早于类构造函数,此时类的非静态实例成员还未完成初始化,因此语法层面禁止字段初始化器引用同个类的其他非静态成员赋值。
    你最初的写法是将Total声明为字段,用columns * rows作为初始化值,违反了上述规则,因此触发编译报错。

替换为=>后运行正常的原因

将赋值符=替换为=>后,Total不再是字段,而是变为表达式体只读属性,等价于以下完整写法:

public int Total
{
    get
    {
        return columns * rows;
    }
}

该属性的求值逻辑是每次访问Total时才会实时计算columns * rows的结果,不会在类初始化阶段固定值,因此不受字段初始化器的规则限制,可以正常运行。

其他常用替代方案

如果你不希望Total每次访问都重复计算,可以选择两种Unity开发中常用的写法:

  1. 在Unity生命周期函数中赋值:
public int rows = 10;
public int columns = 10;
public int Total;

private void Awake()
{
    Total = rows * columns;
}
  1. 若rows和columns的值永远不需要修改,可声明为const常量,常量属于静态成员,可被字段初始化器直接引用:
public const int rows = 10;
public const int columns = 10;
public int Total = rows * columns; // 无编译报错

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:57:00