2013-05-17 3 views
1

어떤 이유로 든 내 배열 summary, subjectdateuse of unassigned local variable 오류가 발생합니다. 아무도 무슨 일이 일어나고 있는지 아니?C# foreach 범위를 벗어났습니다.

int count = 0; 
    string[] summary; 
    string[] subject; 
    string[] date; 

    foreach (SyndicationItem item in feed.Items) 
    { 
     subject[count] = item.Title.Text; 
     date[count] = item.PublishDate.DateTime.ToString(); 

     summary[count] = item.Summary.Text; 
     list.InnerHtml += "<a href=\"#\" onclick\"showArticle(" + count + ");\"><li id=\"post" + count + "\"><b>" + subject[count] + "</b><br>" + 
      "<p id=\"posted-date\">Posted on: " + date[count] + "</p>" + "</li></a>"; 
     count++; 
    } 
+13

... 할당되지 않았기 때문에. 질문이 뭐야? –

+1

오 남자, 사람들은 너무 빨리 대답 =) –

+2

칠리 앤드류; 그것은 유효한 질문입니다. –

답변

7

당신은 예를 들어, 특정 크기로 배열을 초기화 할 필요가 배열의 길이에 대해 알고 있거나 신경 써야합니다. 루프보다 먼저 Count() 확장 메서드가 불필요하게 feed.Items을 열거하므로 실제로 상황에 따라 목록이 바람직합니다.

+0

+1 대신'List '제안. – Bobson

+0

feed.Items는 배열이 아닌 IEnumerable 입니다. –

+0

@ThomasLevesque 감사합니다. –

2

절대 값을 할당하지 마십시오. 배열을 만들지 않았더라도 인덱서를 통해 배열에 액세스 할 수만 있습니다. 당신은 너무처럼 그들을 초기화 할 수 있습니다 : 당신이하지 않으면 다른 방법

string[] summary = new string[feed.Items.Count()]; 

, 당신은 배열 대신 List<String>를 사용할 수 있습니다

string[] summary = new string[feed.Items.Count]; 
string[] subject = new string[feed.Items.Count]; 
string[] date = new string[feed.Items.Count]; 
+1

'IEnumerable '에는 Count 속성이 없습니다 ... –

+0

@ThomasLevesque 유형이 실제로 무엇인지는 알 수 없습니다. 나는 'Count'속성이 있고 그 대답이 맞지 않을 경우 조정할 준비가되어 있다고 추측했지만 그 변수의 크기를 빠르게 계산할 방법이 없다면 OP 만 말할 수있었습니다. – Servy

+1

새 의견을 게시하기 전에 다른 의견에 대한 답변을 읽어야합니다;) –

2

은 초기화되지 않았습니다.입니다. ,

string[] summary = new string[length]; 

그러나,이 경우 사전에 길이를 모르는 : 당신은 다음과 같이 사용하기 전에 배열을 초기화 할 필요가

string[] summary = new string[feed.Items.Count]; 
string[] subject = new string[feed.Items.Count]; 
string[] date = new string[feed.Items.Count]; 
2

: 당신은 같은 선언을 완료해야 feed.ItemsIEnumerable<SyndicationItem>이므로 항목 수를 직접 얻을 수는 없습니다 (.Count()을 사용할 수는 있지만 컬렉션을 여러 번 열거 할 수는 있지만 대개 권장하지 않음).

더 좋은 방법은 배열 대신 목록을 사용하는 것입니다 :

List<string> summary = new List<string>(); 

... 

summary.Add(item.Summary.Text) 

... 
+0

'feed.Items'는'IEnumerable '입니다. 어떻게 알았어? 또한 그것이 사실 일지라도 (OP에 표시되지 않음) 기능의 제한이 없습니다. 적어도 주어진 기능이 있음을 나타냅니다. 이미 계산 된 길이 필드에 액세스하는 방법이있을 수도 있고 그렇지 않을 수도 있습니다. 우리는 질문에 정보가 주어지면 알 수 없습니다. – Servy

+2

@Servy, 문서에 나와 있기 때문에 알 수 있습니다. http://msdn.microsoft.com/ko-kr/library/bb340171.aspx –

+0

세계의 다른 유형에는 ' 'SyndicationItem'을 리턴하는 GetEnumerator 메소드? 미안하지만. 그것은 좋은 추측입니다, 아마도 아주 좋은 추측이지만 여전히 추측입니다. – Servy

0

이전 대답은 정확하게 식별 한 당신이 배열의 크기와 배열 변수를 초기화 할 필요가있다. 이유가 무엇인지 생각해 보려면 foreach 루프가 시작될 때 프로그램에서 이러한 배열이 얼마나 많은 메모리를 차지할 것인지 전혀 알지 못합니다. 메모리에서 어디에서 summary[count]이 가리킬 지 말할 수는 없습니다!

관련 문제