【发布时间】:2020-04-16 14:04:54
【问题描述】:
form1 有三个组合框。在表单中我尝试创建以下代码。
public partial class Form1 : Form
{
private List<ComboBox> comboBoxes = new List<ComboBox>()
{
combobox1,combobox2,combobox3
};
}
我收到类似
的错误A field initializer cannot reference the non-static field, method, or property
但我可以在函数内部访问这些组合框。我想创建组合框列表。告诉我为什么我无法访问它,以及如何实现?
【问题讨论】:
-
字段在类构造函数之前初始化。这些参考文献还不存在。你可以写
List<ComboBox> comboBoxes = new List<ComboBox>() { new ComboBox(), new ComboBox() };。没那么有用,对吧?无论如何,您都应该重新设置这些引用。 -
这是一个旨在让您远离麻烦的语言规则。真麻烦。 .NET 运行时实际上并不支持这种复杂的字段初始化,C# 编译器通过将代码移动到构造函数来解决它。在您在构造函数中编写的任何代码(如果有的话)之前运行的第一件事。问题是, combobox1 (etc) 变量尚未初始化并且仍然为空。 InitializeComponent() 方法稍后运行。解决方法很简单,只需在 InitializeComponent() 调用之后移动赋值即可。
标签: c# windows visual-studio winforms