要解决编译时问题,请将初始化放在构造函数中。您根本不允许从另一个的初始化程序中引用一个实例变量。这在第 10.5.5.2 节的 C# 规范中有所规定:
实例字段的变量初始值设定项不能引用正在创建的实例。因此,在变量初始化程序中引用 this 是编译时错误,因为变量初始化程序通过简单名称引用任何实例成员是编译时错误。在示例中
class A
{
int x = 1;
int y = x + 1; // Error, reference to instance member of this
}
变量初始化器y
导致编译时错误,因为它引用了正在创建的实例的成员。
老实说,还不清楚您甚至需要作为实例变量: path
public class Form1 : Form
{
private string[] userNames;
public Form1()
{
string path = "http://mywebsite.com/accounts.txt";
userNames = File.ReadAllLines(path);
}
}
或者,如果它总是要从该路径读取,您可以内联它:
public class Form1
{
private string[] userNames =
File.ReadAllLines("http://mywebsite.com/accounts.txt");
}
并不是说这些中的任何一个都可以实际工作-File.ReadAllLines
采用本地文件名 -而不是URL。您将需要WebClient
或类似的东西。
我强烈建议您退后一步,弄清楚表单的逻辑状态是什么。老实说,从构建网站加载用户名对于表单来说是一件很奇怪的事情。此外,您不应在 UI 线程上执行可能长时间运行的操作(如获取网页)。
关于您的代码有很多需要考虑的地方——远远超过直接的编译问题。