gpt4 book ai didi

c# - "Non-nullable field is uninitialized"的编译器错误,即使已在InitializeComponents函数中对其进行了初始化

转载 作者:行者123 更新时间:2023-12-04 05:32:06 24 4
gpt4 key购买 nike

在WinForms中,常见的初始化函数是初始化引用变量(例如)

class SomeClass : Form {
Button b;

SomeClass() {
InitializeComponents();
}

SomeClass(Container x) {
InitializeComponents();
}

void InitializeComponents() {
b = new Button();
}
}

如您所见,b始终被初始化为非null值。但是,C#8仍然会提示SomeClass()没有初始化不可为空的值b。

当然,我可以将b标记为可为空(按钮?b),但是,由于未检查可为空性(它不能为null ...),因此现在我将对b的每次使用均发出警告。

解决此问题的最佳方法是什么。是否存在可用于将InitializeComponent标记为始终由构造方法调用的属性?

请注意,这是WinForms中的一种非常常见的模式(每个组件...)

尤瓦尔

最佳答案

按照preview docs:

Q: Why are warnings reported for fields that are initialized indirectly by the constructor, or outside the constructor?

A: The compiler recognizes fields assigned explicitly in the current constructor only, and warns for other fields declared as non-nullable. That ignores other ways fields may be initialized such as factory methods, helper methods, property setters, and object initializers. We will investigate recognizing common initialization patterns to avoid unnecessary warnings.



因此,现在没有办法 来实现您想要的目标,而无需将该分配直接移到构造函数中(或在声明它的行上分配它)。

关于c# - "Non-nullable field is uninitialized"的编译器错误,即使已在InitializeComponents函数中对其进行了初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55337871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com