2016-08-11 1 views
0
int count = 0; 

foreach (string s in Settings.Default.Name) 
{ 
    count++; 
} 

Settings.Default.Name[count] = tb_add_name.Text; 
Settings.Default.Save(); 

Settings.Default.Name 빈 문자열 배열하지만 foreach는한다에 NullReferenceException이받을 수 있나요?이유는이 foreach는 방법

배열은 나중에 단어로 채워집니다.

+0

Settings.Default.Name 빈 배열은 어떻게 foreach는 interate 그 위에, 그것은 두 가지 가능한 원인은 여기에'NullReferenceException'에 대한 있습니다 NullRefferenceException – Mostafiz

+1

을 던져해야 하나'Settings.Default.Name'가 null (이 * 빈 문자열 배열이 아닌 *)이거나,'tb_add_name'이 null이라는 것을 의미합니다. 오류 스택 추적은 이들 중 어느 것이 있는지 알려줍니다. – poke

답변

2

네,하지만 그 카운트가 0이 여전히 있다는 사실을 변경하지 않습니다 그리고 당신은 여전히 ​​인덱스가 유효 또는 null의 경우 Settings.Default.Name[count] = tb_add_name.Text;

그래서 당신은 여전히 ​​확인해야합니다 실행합니다. 같은 뭔가 : 당신의 foreach 루프는 기본적으로 배열의 크기에 count 변수를 설정하고, Array[Array.Length]이 범위를 벗어나 항상 있기 때문에 그런데

if(Settings.Default.Name != null && Settings.Default.Name.Count > 0) 

, 당신의 방법은 항상 IndexOutOfRange 예외로 이어질 것입니다.

+0

빈 열거 형을 반복 할 수 있으므로 0 인 카운트에는 아무런 문제가 없습니다. 그러나 OP 코드는 루프가 끝난 후'count'가 'Settings.Default.Name.Count' 값을 가지므로 (마지막 인덱스보다 하나 더) 인덱스 열 이외의 값을 설정할 수 없기 때문에 여전히 실패합니다. 실제로 요소를 추가 (인덱스가 필요없는 경우도 있음)해야합니다. – poke

+0

코드를 시도했지만 "Settings.Default.Name.Count> 0"이 작동하지 않습니다. 오류가 발생합니다. '연산자'> '를'메서드 그룹 '및'int '유형의 피연산자에 적용 할 수 없습니다. – Julian

+0

아, 이제 알겠습니다. 오류 NullReferenceException 여기에 : 'Settings.Default.Name [count] = tb_add_Name.Text' 하지만 'count'가 0이고 'tb_add_Name.Text'가 비어 있지 않거나 null이 아닙니다 – Julian

0

배열 Length 속성을 사용할 수 있습니다.

if(Settings.Default.Name.Count > 0) 
{ 
    int count = 0; 

    foreach (string s in Settings.Default.Name) 
    { 
     count++; 
    } 

    Settings.Default.Name[count] = tb_add_name.Text; 
    Settings.Default.Save(); 
} 
+0

'Settings'는'Length' 속성을 가지고 있지 않으며, 이것으로는 분명히 던져지고있는 null 참조 예외를 막을 수 없습니다. – poke

+0

답변을 업데이트했습니다. 나는 백작을 그리워. – Developer