如何初始化不可为空的类型?

How to initialize a non nullable type?

提问人:user2144480 提问时间:9/4/2023 最后编辑:marc_suser2144480 更新时间:9/4/2023 访问量:48

问:

我被告知初始化我的结构数据,但我不能? 不可为 null:DeviceState

struct XControllers
{
    public XInput.DeviceState device;
    public bool connected;
}

...

XControllers controller;
controller.connected = false;

// can not init device
var previousState = controller.device.State;

错误:

使用可能未分配的字段“device”

C# null

评论

1赞 UnholySheep 9/4/2023
为什么不能初始化字段?device
0赞 Ada 9/4/2023
这回答了你的问题吗?构造函数是初始化 C# 中类中不可为 null 属性的唯一方法吗?
0赞 EyesShriveledToRaisins 9/4/2023
XInput.DeviceState可能是一个引用类型。您可以创建实例并将其分配给 。编译器和 .NET 运行时都不会神奇地为您创建这样的实例。如果不这样做,将保持其默认值。并且不是一个实例。尝试取消引用也不会成功,因为(这是 的值)不能取消引用。编译器在您的代码中注意到了这种情况,并对此嗤之以鼻。XInput.DeviceStatecontroller.devicecontroller.devicenullnullXInput.DeviceStatecontroller.device.Statenullcontroller.device.State
1赞 Jon Skeet 9/4/2023
@EyesShriveledToRaisins:不,这个值根本没有明确分配。这并不是关于无效性 - 而是关于一个未完全分配的结构。有关具有类似错误的示例,请参阅 gist.github.com/jskeet/c5a4a1d2ecc1d3493bcbe2cc1ac6a03c,但不涉及引用类型。
0赞 user2144480 9/5/2023
@jon飞碟,但我的问题是我无法将其设置为任何内容。如果它是 int,我可以使用 0,但我找不到默认的初始化方式。

答: 暂无答案