小编Yuv*_*avy的帖子

“不可为空字段未初始化”的编译器错误,即使它是在 InitializeComponents 函数中初始化的

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

class SomeClass : Form {
  Button b;

  SomeClass() {
    InitializeComponents();
  }

  SomeClass(Container x) {
    InitializeComponents();
  }

  void InitializeComponents() {
    b = new Button();
  }
}
Run Code Online (Sandbox Code Playgroud)

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

当然我可以将 b 标记为可空(按钮?b)但是,现在我会在每次使用 b 时收到警告,因为未检查可空性(它不能为空...)

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

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

尤瓦尔

c# winforms c#-8.0 nullable-reference-types

10
推荐指数
2
解决办法
3022
查看次数

标签 统计

c# ×1

c#-8.0 ×1

nullable-reference-types ×1

winforms ×1