2012-12-13 5 views
0

여기 일부 코드는 분명하지 않습니다. 나는 아직도 사물을 시험 중이다. 세 가지 질문이 있습니다. 목록에 문자열을 추가 할 때 오류가 나타나는 이유는 무엇입니까? Class1의 목록을 주 수업에 어떻게 전달합니까? List passArr에서 구문이 올바 릅니까? passArr 끝에 괄호를 추가해야하는지 잘 모르겠습니다.다른 클래스에 목록 전달

class Class1 
{ 
    public static List<string> passArr 
    { 
     get; 
     set; 
    } 

    public static void passIt() 
    { 
     passArr.Add("A"); //Error: Object reference not set to an instance of an object 
    } 
} 

메인 클래스

class Program 
{ 
    static void Main(string[] args) 
    { 
     Class1.passIt(); 
     List<string> passArr1 = Class1.passArr; 
     foreach (string s in passArr1) 
     { 
      Console.WriteLine(s); 
     } 
     Console.ReadLine(); 
    } 
} 

답변

5

당신은 결코 목록을 작성하지거야, 그래서 (그런데, 이름 바꾸기 필요가)에 passArr 속성은 항상 null의 값을 갖는다. 다음과 같은 것이 필요합니다.

Class1.passArr = new List<string>(); 

또 다른 대안은 이니셜 라이저와 필드의 지원 읽기 전용 속성 수 있도록하는 것입니다 :

private static readonly List<string> passArr = new List<string>(); 
public static List<string> PassArr { get { return passArr; } } 

(이 경우의 관점에서 명명 규칙을 준수하지만, 물론, 여전히 의미있는 이름이 아니다 .)

+0

감사

메인 클래스

class Program { static void Main(string[] args) { Class1 cs = new Class1(); cs.passIt(); foreach (string s in cs.passArr) { Console.WriteLine("Inside main: " + s); } Console.ReadLine(); } } 

클래스 1 :

여기 내 새로운 코드입니다! 내 목록 passArr1 = Class1.passArr을 대답하여 변경하려고 시도했지만 Class1에 'passArr1'에 대한 정의가 포함되지 않았다는 오류가 발생했습니다. – Blackator

+3

Class1.PassArr을 원한다면, passArr는 이제 게터가있는 개인 목록 – Sayse

+0

죄송합니다. 잘못된 코드를 변경했습니다. 그러나 Jon Skeet의 수정을 시도했을 때 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."라는 오류가 발생했습니다. 여전히 나타났다. – Blackator

0

해답은 Jon Skeet과 Sayse에게 감사드립니다. 이제는 나에게 분명하다. 실제 문제는 목록에 새 객체를 만들지 않고 목록에 무언가를 추가하려고한다 (passIt 메소드 사용). 빠른 회신

class Class1 
{ 
    public List<string> passArr 
    { 
     get; 
     set; 
    } 

    public void passIt() 
    { 
     passArr = new List<string>(); 
     passArr.Add("A"); 
    } 
} 
+0

나는 이것이 OLD 질문이라는 것을 알고 있습니다. 그러나 초급 프로그래머를 위해 생성자에서리스트를 인스턴스화 해보십시오 :'public Class1() {passArr = new List (); }' – Machtyn

관련 문제