Yuv*_*avy 10 c# winforms c#-8.0 nullable-reference-types
在 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 中非常常见的模式(每个组件...)
尤瓦尔
对于您非常具体的示例,解决方案是合并InitializeComponent()到默认构造函数中并从第二个构造函数中调用它。
class SomeClass : Form {
private readonly Button b;
public SomeClass() {
b = new Button();
}
public SomeClass(Container x): this() {
// Something else...
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这是一个众所周知的当前限制,而且,所有设计器生成的代码都不会遵循这种模式,那么您可能需要在#nullable disable这里和那里放置一些(或其他指令之一,视情况而定)。
| 归档时间: |
|
| 查看次数: |
3022 次 |
| 最近记录: |