2013-10-09 2 views
0

내 웹 사이트의 온라인 .txt 파일에서 계정 목록을 읽을 수있는 무언가를 만들고 싶습니다.필드 초기화 프로그램이 비 정적 필드, 메서드 또는 속성 'NecroBomber.Form1.path'를 참조 할 수 없습니다.

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); 

메신저 작업을 거부하고 정말 혼란 스러워요 -_-

+0

왜 당신은 lanugage 태그를 스팸하고 있습니까? * one *을 선택합시다. –

+0

'NecroBomber'? '루즈 세'? '계정 목록 읽기'? 흠 .. 아니, 의심스러운 건 없어. – hawkke

+0

아무 것도 의심하지 마세요. –

답변

4

컴파일 타임 문제를 해결하려면 초기화를 생성자에 넣으십시오. 하나의 인스턴스 변수를 다른 인스턴스 변수의 이니셜 라이저에서 참조 할 수 없습니다. 이것은 10.5.5.2 절의 C# 사양에 정의되어 있습니다.

인스턴스 필드의 변수 이니셜 라이저가 생성중인 인스턴스를 참조 할 수 없습니다. 따라서 변수 이니셜 라이저에서 단순한 이름을 통해 참조 할 수있는 컴파일 타임 오류이기 때문에이를 변수 이니셜 라이저에서 참조하는 것은 컴파일 타임 오류입니다. 예

class A 
    { 
     int x = 1; 
     int y = x + 1; // Error, reference to instance member of this 
    } 

에서 컴파일시에 오류 y 결과는 인스턴스의 멤버를 참조하므로위한 변수 초기화가 생성된다.

public class Form1 : Form 
{ 
    private string[] userNames; 

    public Form1() 
    { 
     string path = "http://mywebsite.com/accounts.txt"; 
     userNames = File.ReadAllLines(path); 
    } 
} 

아니면 항상어쨌든 그 경로에서 읽을 것입니다, 당신은 그냥 인라인 수 :

그것은 당신도 정직하게, 인스턴스 변수로path이 필요하다는 것을 불분명 :

public class Form1 
{ 
    private string[] userNames = 
     File.ReadAllLines("http://mywebsite.com/accounts.txt"); 

} 

이들 중 어느 하나도 실제로는 일이 아닙니다. - File.ReadAllLines은 URL이이 아닌 인 로컬 파일 이름을 사용합니다. WebClient 또는 이와 비슷한 것이 필요합니다.

나는 당신이 한 걸음 물러서서 양식의 논리적 인 상태를 알아내는 것이 좋습니다. 건설중인 웹 사이트에서 사용자 이름을로드하는 것은 솔직히 말해서 양식이하는 이상한 일입니다. 또한 UI 스레드에서 잠재적으로 오랜 기간 실행되는 작업 (예 : 웹 페이지 가져 오기)을 수행하지 않아야합니다.

코드에 대해 고려해야 할 사항이 많습니다. 즉각적인 컴파일 문제는 아닙니다.

관련 문제