2010-07-27 4 views
2

많은 콤보 박스를 사용합니다. 나는 종종 그들을 통해 루프
C# 루프 비교

while(cmbCompany.SelectedValue.ToString()!=B1ID) 
{ 
    cmbCompany.SelectedIndex++; 
} 

a)는 좀 더 빨리 옵션을 잃었 ... 예를 들어 SelectedValue,에 따라 일치하는 항목을 찾을 수 있습니다!
b) 내 비교가 정수와 비교되는 경우 문자열을 선언하고 integer.ToString()과 같은 값을 설정하면 어떤 이점이 있습니까? 아니면 그냥 위의 예제에서 B1ID.ToString()을 사용하면 컴파일러 최적화 나를 위해?
c) 또는 문자열 비교가 너무 느려서 정수로 SelectedValue를 구문 분석 (또는 형 변환)하는 것이 더 낫지 않습니까?

+0

것은 당신이 윈폼을 사용하고 또는 WPF? –

답변

1

cmbCompany.SelectedValue = B1ID 트릭을 수행해야합니다 - 그렇지 않습니까?

+0

SelectedValue가 B1ID와 일치하는 문자열로 변환해야하는 경우가 아닙니다. –

+2

B1ID를 SelectedValue와 일치하는 항목으로 변환하는 것이 좋습니다. –

+0

덕분에 나는 그 방법으로 사용할 수 있다는 것을 깨닫지 못했기 때문에 현재 선택한 항목 값을 B1ID로 설정해야한다고 생각 했었습니다. 이제는 모두 바보가되어야합니다. 때때로 언어는 내가 기대하는 것보다 더 'intelegent'하다. – Graham

0

a) 어쩌면,하지만 다른 사람들이 그 부분에 대답하도록 할 것입니다.

b) 컴파일러가 ToString을 루프 밖으로 나올 가능성이 없습니다.

c) 각 값을 재분석하는 것이 확실히 느립니다. 문자열을 비교하는 것이 좋습니다.

0

a/b) FindString을 사용해 보셨나요? 이 방법은 기본적으로 * 시작하는 항목을 찾습니다 (Find exact에 대해 동등한 항목이 있음). 다음 빠를뿐만 아니라 주조하기 위해 더 많은 비용 일명 (기본 유형을 사용합니다 방법 내장

또는 당신이 "항목"을 검색

cmbCompany.Items.FindByValue 

C를 할 수는) 비교)

8

알고리즘의 가장 혼란스러운 부분은 비교할 때마다 색인을 증가시키고 있다는 것입니다. 이는 매번 선택 변경 이벤트에 반응하면 논리가 불필요하게 복잡해지기 때문에 이벤트를 발생시키는 모든 테스트 (실제로 유선 상태 인 경우) 및 잠재적으로 위험한 모든 테스트에서 선택을 실제로 변경하기 때문에 매우 비효율적입니다.

다른 여러 가지 방법이 있습니다. 다음은 MSDN에서 더 나은 (거친하지만) 코드 예제입니다 :

int index = comboBox1.FindString(textBox2.Text); 
comboBox1.SelectedIndex = index; 

가 (.이 코드는 먼저 컬렉션의 데이터를 보이는 것을 알는 다음 selectedIndex의 값을 설정합니다)

+0

멋진, 감사합니다, 예 나는 이벤트를 껐다가 다시 켜야합니다. 나는 항상 생각하지 못했습니다. 필자는 FindStringExact를 사용하여 콤보 상자에 입력 된 '새 항목'을 확인했지만 색인을 다시 얻지 못했다는 사실을 깨닫지 못했습니다. 이제 많은 변경을했습니다. :) – Graham