2017-10-19 14 views
-1

나는 C#으로 시험 시스템을 만들고있다. 나는 결과를 만들고 있는데, 나는 listbox1에 답을 가지고 있고 또 다른 listbox2에 정답을 가지고있다. 내 문제는 listboxes의 값과 비교되어야하고 그 결과는 그 밑에 생성되어야한다. 값의 절반이 학생이 합격하면 실패합니다. 내 코드는 다음과 같지만 작동하지 않습니다. 당신은 당신이항목을 일치시키고 결과를 생성

당신이 짧은 방법을 원하는 경우 listBoxSanswers에 두 목록 중 하나를 변경해야보다 루프없이, 당신의 접근 방식을 사용하려면

for(int intCount = 0; intCount < listBoxSanswers.Items.Count;intCount++) 
{ 
    for (int intSubCount = 0; intSubCount < listBoxActAnswers.Items.Count; intSubCount++) 
    { 
     if (listBoxActAnswers.Items[intCount].ToString() == listBoxActAnswers.Items[intSubCount].ToString()) 
     {  
      listBox3.Items.Add(listBoxActAnswers.Items[intCount].ToString()); 
     } 
    } 
} 
+1

if 문에서 두 목록 중 하나가 "listBoxSanswers"여야합니다. – Bambuk

+0

"작동하지 않습니다"라고 말하면 정확히 무엇을 의미합니까? 오류가 발생 했습니까? 또는 예상 한 결과를 얻지 못하고 있습니까? – RH6

+0

작동하지 않는다는 것은 세 번째 목록 상자에 두 개의 목록 상자의 공통 항목을 복사하지 않는다는 의미입니다. listbox1과 listbox2의 항목을 비교하고 공통 항목을 listbox3에 추가해야합니다. –

답변

0

, 당신은이 줄을 시도 할 수 있습니다 :

listBox3.Items.AddRange(listBoxActAnswers.Items.Cast<string>().ToList().Intersect(listBoxSanswers.Items.Cast<string>().ToList()).ToArray()); 

편집 : 좋아 아, 그래서 당신은 데이터 소스로 DataTable에 있습니다.

listBox3.Items.AddRange(listBoxActAnswers.Items.Cast<DataRowView>().Select(r => r[0]).ToList().Intersect(listBoxSanswers.Items.Cast<DataRowView>().Select(r => r[0]).ToList()).ToArray()); 

어쩌면 당신은 당신의 DisplayMember입니다 오른쪽 열에에 Select(r => r[0])을 적용한다 : 당신이 이런 식으로 할 수있는 것보다 .

+0

코드에서 다음 오류가 발생합니다. 'System.Data.DataRowView'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다. –

+0

내 대답을 편집했습니다. – Bambuk