2012-07-02 5 views
2

변수를 생성하지만 실제로 텍스트 상자에 표시하는 방법을 알 수없는 코드가 있습니다.목록 <string[]> 목록 값을 표시합니다.

List<string[]> test = parseCSV(); 
for (int i = 0; i < test.Count; i++) 
{ 
    Console.WriteLine("i = {0}",i); 
    Console.WriteLine("test[i] = {0}", test[i]); 
    nameList.Text = test[i].ToString() + "\n" + nameList.Text; 
} 

내가 콘솔에 출력 test[i] 제대로 문자열 정보를 표시하지만, 텍스트 상자 I 출력 test[i] 내가 얻을 때 :

System.String[] 
System.String[] 
System.String[] 
System.String[] 
System.String[] 
System.String[] 

사람이 내가 잘못 뭘하는지 말해 줄 수 ?

답변

5

ToString은 (는) variety of situations에 나타나는 일반적인 오해입니다. 기본 유형이 "예상대로"작동하는 것처럼 보이더라도 마술 형식의 마법사는 아닙니다. ToString은 단순히 현재 데이터를 합리적으로 표현합니다.

배열 데이터의 경우 .Net이 모든 ToString 호출 (디버거가 많이 사용하는)에 대해 전체 배열을 출력하는 것은 불쾌 할 수 있습니다. 60x60x10 인 문자열의 3D 배열을 상상해보십시오. 디버거의 배열 위에 마우스를 올려 놓기 때문에 단순히 렌더링을 기다리지 않아도됩니다.

이 경우 String.Join을 사용할 수

for (int i = 0; i < test.Count; i++) 
{ 
    Console.WriteLine("i = {0}",i); 
    Console.WriteLine("test[i] = {0}", test[i]); 
    nameList.Text = String.Join(", ", test[i]) + "\n" + nameList.Text; 
} 
4

test[i]은 문자열 배열입니다. 배열은 ToString()을 무시하지 않으므로 객체의 유형 (이 경우 System.String[])을 보여주는 기본 구현을 얻는 것입니다.

무엇이 당신이 을 원하는지 확실하지 않아과 관련이 있습니다. 예를 들어 다음을 사용할 수 있습니다.

Console.WriteLine("test[i] = {0}", string.Join(", ", test[i])); 

... 배열 내의 모든 문자열에서 쉼표로 구분 된 문자열을 만듭니다.

편집 :

Console.WriteLine("test[i] = {0}", test[i]); 

것은 실제로 각 스트링 어레이로부터 제 문자열을 인쇄하고이 있습니다. 배열 공분산을 사용하여 string[]object[]으로 변환합니다. 더 명확하게 동일한 작업을 수행하려면 사용하는 것 : 그래서

Console.WriteLine("test[i] = {0}", test[i][0]); 

를 그냥 텍스트 상자에 각 배열의 첫 번째 값을 얻을 수 원하는 경우, 당신은 사용할 수 있습니다

nameList.Text = test[i][0] + "\r\n" + nameList.Text; 

(이것은 "행"의 순서를 반대로 바꿀 것입니다.) \n\r\n으로 변경했습니다. Windows에서 줄 바꿈에 텍스트 상자가 사용하는 것과 같습니다.)

+0

Console.WriteLine ("시험 [내가] = {0}"시험 [I]) 얻는다; 정확히 내가 원하는 것을 수행 할 것인가? 그것은 각 문자열 요소를 쉼표가없는 새로운 줄로 출력한다. –

+0

nameList.Text = test [i] .ToString() + "\ n"+ nameList.Text; 문제는, 같은 코드를 사용하여 콘솔에서와 같은 방식으로 텍스트 상자에 표시 할 수 없습니까? –

+0

@ user1296932 : 아니요. 각 배열에서 * first * 문자열을 출력합니다. –

1

당신은 목록에 문자열의 배열을 저장하고 있습니다.올바른 코드는 다음과 같습니다.

foreach (string[] items in test) 
    foreach (string item in items) 
    { 
     ... 
    } 

이렇게하면 목록의 모든 배열을 반복 한 다음 현재 배열의 모든 항목을 반복합니다. 테스트에

0

요는 ToString을 사용하는() 메소드 [I]로 .toString()이 테스트 [I] 당신의 지식을 Object.toString를 들어

() 현재 개체를 나타내는 문자열을 반환처럼 사용하십시오.

그러므로하면

System.String[] 
System.String[] 
System.String[] 
System.String[] 
System.String[] 
System.String[]