2013-01-16 3 views
0

문자열 목록 (storedProcedures)을 반복하고 각 목록 항목을 배열로 분할합니다. 특정 인덱스를 사용하여 배열 요소에 액세스하려고합니다. 배열의 두 번째 요소에 액세스하려고하면 범위를 벗어나는 예외가 발생합니다.배열 인덱싱 - 범위를 벗어남

string[] myArray = new string[4]; 
foreach (string procedure in storedProcedures) 
{ 
    myArray = procedure.Split(','); 

    foreach (string index in myArray) 
    { 
     Console.WriteLine(index); 
    } 

    for (int i = 0; i < myArray.Length; i++) 
    { 
     Console.WriteLine(myArray[i]); 
    } 

    Console.WriteLine(myArray[0]); 
    Console.WriteLine(myArray[1]); <---- out of range exception here 
    Console.WriteLine(myArray[2]); 
    Console.WriteLine(myArray[3]); 
} 

배열에 액세스하고 'foreach는'와 잘 작동 루프 '에 대한'를 사용하여 그 내용을 인쇄, 그래서 인덱스를 직접 작동하지 않습니다 지정하여 배열을 액세스하는 이유는 확실하지 않다?

+0

storedProcedures의 내용은 무엇입니까? myArray가 1 개의 요소를 포함 할 가능성이 매우 높습니다. – Nashibukasan

답변

3

이 쓸모가

myArray = procedure.Split(','); 

귀하의 문제는 storedProcedures 중 하나는 쉼표가없는 것입니다.

1

Console.WriteLine(myArray.Length)은 무엇을 표시합니까? 배열을 크기 4로 시작하지만 procedure.Split(',')은 새로운 배열을 제공합니다. 가능한 한 요소 만 있습니다. 이 멀리 배열을 발생하기 때문에

string[] myArray = new string[4]; 

:

+0

매트 - 배열의 길이는 항상 4를 표시합니다. – spickles

1

분할 배열이 예상보다 짧습니다. 배열에서 값을 검색하기 전에 항상 길이를 확인해야합니다. 어쩌면 일부 쉼표가 누락되었을 수 있습니다. 문자열의 형식이 올바르지 않은 것 같습니다. 디버그를 더 잘 수행 할 수 있습니다.

foreach (String procedure in storedProcedures) 
{ 
    Console.WriteLine("Current Procedure: \"" + procedure + "\""); 

    String[] split = procedure.Split(','); 

    Console.WriteLine("Split Length: " + split.Length.ToString()); 

    for (int i = 0; i < myArray.Length; i++) 
     Console.WriteLine(i.ToString() + ") " + split[i]); 
} 
+0

고마워요! 코드 스 니펫을 사용하면 즉시 문제를 확인할 수있었습니다. 나는 내가 명백한 문제를 놓친 코드 의미론이라고 생각했던 것에 너무 매달렸다. – spickles

+0

여러분을 환영합니다! –