2013-10-09 29 views
0

我尝试做的东西,可以从我的网站上在线.txt文件读取列表,关闭账户,但我不断收到错误一个字段初始不能引用非静态字段,方法或属性“NecroBomber.Form1.path”

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

IM和真正难倒就如何修正这个错误,下面的代码是用于定位和读取在线文件,但它拒绝工作:(

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

IM良好,真正困惑-_-

+0

你为什么发送垃圾邮件lanugage标签?我们来选一个*。 –

+0

'NecroBomber'? 'Lulzsec'? '阅读帐户列表'?嗯......不,这里没什么可疑的。 – hawkke

+0

不可疑 –

回答

4

为了解决编译时问题,将初始化放在构造函数中。你根本不被允许从另一个的初始化器引用一个实例变量。这是规定了在C#说明书中部分10.5.5.2:

为实例字段变量初始值不能引用被创建的实例。因此,在变量初始值设定项中引用它是编译时错误,因为变量初始值设定项通过简单名称引用任何实例成员是编译时错误。在该示例中

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线程上执行潜在的长时间运行操作(如获取网页)。

有很多要考虑你的代码 - 远远超过了直接编译的问题。

相关问题