2014-03-13 4 views
0

의 비 정적 필드 메서드 또는 속성 오류를 참조 할 수 없습니다. Windows 양식 응용 프로그램을 실행하면 initializer cannot reference the nonstatic field method or property이 표시됩니다.필드 초기화 프로그램에서 C#

string lia = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
StreamReader fileitem=new StreamReader(Path.Combine(lia,"dataset.txt")); //Error line 

가늘며, lia을 문자열로 인식 할 수 없습니다. 아이디어가 있으십니까?

+1

두 줄이 서로 이어지는 것이 확실합니까? – nvoigt

답변

6

나는 얇아서 lia를 문자열로 인식 할 수 없습니다.

아니요. 오류가 표시되는 것처럼 이니셜 라이저에서 다른 인스턴스 변수의 값을 사용할 수 없습니다.

간단한 수정하는 대신 생성자에서 초기화를 넣어 보통 : 그것은,

public class Foo 
{ 
    // TODO: Fix names to be more conventional and friendly 
    string lia = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
    StreamReader fileitem; 

    public Foo() 
    { 
     fileitem=new StreamReader(Path.Combine(lia,"dataset.txt")); 
    } 
} 

을 다른 한편으로 이러한 에서 모든 필드해야한다고하지 분명 ... 우리는이 없습니다 충분한 문맥을 확신 할 수는 있지만 클래스에 선언 된 인스턴스 필드 대신에 로컬 변수가 메소드 내에 있어야하는지 여부를 고려해야합니다.

+0

감사. 나중에 "fileitem"을 사용하고 싶다면, @ Skeet을 어떻게해야합니까? 왜냐하면 "현재의 컨텍스트에 존재하지 않는 fileitem이라는 이름"을 가지고 있기 때문입니다. – user3403967

+0

@ user3403967 : 그럴 경우에는 필드가되기를 원할 것입니다. 그러나 일반적으로 변수를 처리해야하는 것은 나쁜 생각입니다. 아마도 생성자의 모든 내용을 읽고이를 문자열로 저장할 수 있습니까? 더 이상 컨텍스트가없는 최상의 방법을 아는 것은 어렵지만 실제로는 어쨌든 문제의 범위를 어느 정도 벗어납니다. 바라기를 나의 대답은 당신의 즉각적인 문제점을 해결했다. (필드 * 일 때도 오류 메시지 *를받는다면 더 많은 컨텍스트가 필요할 것이므로 짧은 코드 예제를 사용하여 새로운 질문을하는 것이 좋습니다.) –

+0

어쨌든, 감사합니다. @JonSkeet – user3403967