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

如何初始化不可空类型?结构体DeviceState未赋值报错求助

不可空值类型DeviceState字段的初始化解决方案

问题原因

C#中值类型(结构体属于值类型)的字段不会自动完成初始化,必须显式为所有字段赋值后,才能使用结构体实例。你只给connected字段赋了值,但device字段未初始化,所以编译器抛出Use of possibly unassigned field 'device'错误。

几种可行的解决方法

  • 直接初始化device字段
    在访问controller.device之前,显式给它赋值:

    XControllers controller;
    controller.connected = false;
    // 将device初始化为默认实例
    controller.device = new XInput.DeviceState();
    // 现在可以正常访问State属性
    var previousState = controller.device.State;
    
  • 使用对象初始化器创建实例
    声明结构体实例时,用对象初始化器一次性完成所有字段的赋值:

    XControllers controller = new XControllers
    {
        connected = false,
        device = new XInput.DeviceState()
    };
    var previousState = controller.device.State;
    
  • 给结构体添加构造函数
    给XControllers结构体添加构造函数,强制初始化所有字段,避免遗漏:

    struct XControllers
    {
        public XInput.DeviceState device;
        public bool connected;
    
        public XControllers(bool connected, XInput.DeviceState device)
        {
            this.connected = connected;
            this.device = device;
        }
    }
    
    // 通过构造函数创建并初始化实例
    XControllers controller = new XControllers(false, new XInput.DeviceState());
    var previousState = controller.device.State;
    
  • 利用值类型的默认初始化
    如果DeviceState的默认值(所有成员为对应类型的默认值)符合你的需求,直接用new XControllers()创建实例即可——值类型实例通过new创建时,所有字段会自动被初始化为默认值:

    XControllers controller = new XControllers();
    // connected默认就是false,这行可以省略
    controller.connected = false;
    var previousState = controller.device.State;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:35:16