2011-07-03 2 views
3

이 코드는 다음과 같습니다.
"할당되지 않은 로컬 변수 사용"오류가 발생합니다.이 코드는 간단하지만 im 당황 스럽네 ..C# : 할당되지 않은 로컬 변수의 사용, foreach 및 if를 사용

public string return_Result(String[,] RssData, int marketId) 
    { 
     string result; 
     foreach (var item in RssData) 
     { 
      if (item.ToString() == marketId.ToString()) 
      { 
       result = item.ToString(); 
      } 
      else 
      { 
       result = ""; 
      } 

     } 
     return result; 
    } 
+0

문제는 foreach 루프가 아니지만 그곳에는 별도의 문제가 있습니다. – BoltClock

답변

10

신고하면 결과가 초기화됩니다. 콜렉션이 비어있는 경우 if 문의 분기 중 어느 것도 가져 오지 않으며 반환되기 전에 결과가 할당되지 않습니다.

public string return_Result(String[,] RssData, int marketId) 
{ 
    string result = ""; 
    foreach (var item in RssData) 
    { 
     if (item.ToString() == marketId.ToString()) 
     { 
      result = item.ToString(); 
     } 
    } 
    return result; 
} 
+0

+1 :'item.ToString()'? 어떤 아이템이 될까요? 조금 당황스러워. – naveen

2

RssData에 항목이없는 경우, result가 설정되어 있지 않을 것이다, 따라서 무효.

(예 :)을 초기화하거나 비어 있는지 확인하고 해당 시나리오에서 오류 상태를 설정하거나 반환하여 디자인에서 고려해야합니다.

1

RssData에 항목이없는 경우 루프는 실행되지 않고 result은 정의되지 않습니다. 이 오류를 피하려면 무언가 (예 : string result = "";)로 초기화해야합니다.

2

컴파일러는 항상 RssData에 항목이 있음을 알 수 없기 때문입니다. 변수가 비어 있으면 루프의 코드가 실행되지 않고 변수가 할당되지 않습니다.

그냥 당신이 그것을 만들 때 항상 값을 가질 수 있도록, null로 변수를 설정 :

string result = null; 
+0

+1 : 그것의 항상 about @ lippert :) @ Guffa : 의심. 더 나은 임무입니다. 'String.Empty' 또는'null'? – naveen

+0

@naveen : 그것은'RssData'가 실제로 비어있는 경우 당신이 원하는 것이 무엇인지에 달려 있습니다. 그것 이외의 나는'null'을 그냥 리터럴 0 값으로 선호하는 반면,'String.Empty'는 어딘가에서 복사해야하는 참조입니다. – Guffa

1

변경을

string result; 

에서

string result = string.Empty; // or null depending on what you wish to return (read further) 

받는 당신의 라인 컴파일러는 그냥 "이봐, 결과를 사용하고 아직 할당되지 않았어!"라고 말하는 것입니다. 초기 인스턴스화에서 그렇게하지 않으면 처음으로 할당 할 때도 마찬가지입니다.

배열 인수가 공백으로 전달되므로 빈 문자열을 반환하는 경우 코드 처리 방법을 고려해야합니다. 빈 문자열 또는 null 값을 반환하도록 선택할 수 있습니다. 이는 단지 행동상의 결정 일뿐입니다.

관련 문제