0

我试图制作一些可以从我网站上的在线 .txt 文件中读取帐户列表的东西,但我一直收到错误消息

A field initializer cannot reference the non-static field, method, or property '*****.Form1.path'

我对如何修复错误感到非常困惑,下面的代码用于查找和读取在线文件,但它拒绝工作:(

 string path = @"http://mywebsite.com/accounts.txt";
        String[] saUsernames = File.ReadAllLines(path);

我很好,真的很困惑-_-

4

1 回答 1

4

要解决编译时问题,请将初始化放在构造函数中。您根本不允许从另一个的初始化程序中引用一个实例变量。这在第 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 线程上执行可能长时间运行的操作(如获取网页)。

关于您的代码有很多需要考虑的地方——远远超过直接的编译问题。

于 2013-10-09T13:21:12.587 回答