2010-04-08 7 views
7

으로 변환 할 수 없습니다. 항목을 String 배열 또는 ListBox.DataSource를 채우는 데 사용한 형식으로 변환하려고합니다. 형식이 ToString()을 재정의했으나 String []이 아닌 변환 된 것으로 보입니다. 당신이 a 함께 할 계획 모두가 반복하되이 경우ListBox.ObjectCollection을 (형식화 된) 배열

String[] a = (String[])ListBox1.Items; 
Contacts[] b = (Contacts[])ListBox1.Items; 

답변

22
string[] a = ListBox1.Items.Cast<string>().ToArray(); 

물론, 당신은() ToArray를 호출 할 필요가 없습니다. 사용자가 직접 IEnumerable<string>Cast<string>()에서 반환 사용할 수 있습니다 예 :

foreach (var s in ListBox1.Items.Cast<string>()) { 
    do_something_with(s); 
} 

또는, 당신은 연락처로 문자열을 변환 할 수있는 방법이있는 경우는 다음과 같이 수행 할 수 있습니다

IEnumerable<Contacts> c = ListBox1.Items.Cast<string>().Select(s => StringToContact(s)); 
+0

매개 변수로 메서드에 전달하기 위해서만 변환해야했습니다. String [] 또는 Contact [] 만 수락했습니다. 매우 도움이됩니다. 감사합니다. –

1

Cast 방법 아무튼를 더 이상 사용할 수없는 것 같습니다. 나는 다른 해결책을했다 :

String[] array = new String[ListBox.Items.Count] 
ListBox.Items.CopyTo(array, 0); 

CopyTo 방법은 기존의 배열을하고 지정된 인덱스 앞으로의 항목을 삽입합니다.

이것이 매우 효율적인지 모르겠지만 일관되고 쓰기 쉽습니다.

관련 문제