2013-05-09 3 views
2

Допустим, у меня есть ComboBox со значениями «Один, два, три»Лучше использовать SelectedIndex или SelectedItem для ComboBox?

Как правило, при тестировании условных событий, основанных на выборе ComboBox, было бы лучше, чтобы ссылаться на ComboBox.SelectedItem или ComboBox .SelectedIndex?

If (ComboBox.SelectedItem = "One") 

или

If (ComboBox.SelectedIndex = 0) 

Или не делает ни имеют преимущество по сравнению с другими?

+1

Что, по вашему мнению, более читаемо? –

+0

Это зависит только от того, что вы и ваша команда решаете, более читабельны и обслуживаемы. – Oded

+0

Хорошо, мне просто интересно, работает ли процессор лучше, чем другой –

ответ

5

Я нахожу SelectedIndex проще, потому что вы можете работать с числом, а когда нет выбора, вам не нужно обрабатывать нуль. SelectedItem может быть нулевым, и вы должны помнить об этом при попытке получить доступ к этому свойству.

Обычно SelectedItem и SelectedIndex используются внутри SelectedIndexChanged события и легко забыть Nothing возможность

Dim curValue = Combo.SelectedItem.ToString() ' <- Possible NullReferenceException' 
    ..... 

Однако, если мы просто говорим о сравнении, то есть очень небольшое преимущество для SelectedIndex, потому что есть нет загрузки и тестирования строки.

ComboBox b = new ComboBox(); 
if(b.SelectedItem == "One") 
    Console.WriteLine("OK"); 
if(b.SelectedIndex == 0) 
    Console.WriteLine("OK"); 

IL код

IL_0000: newobj  System.Windows.Forms.ComboBox..ctor 
IL_0005: stloc.0  // b 
IL_0006: ldloc.0  // b 
IL_0007: callvirt System.Windows.Forms.ComboBox.get_SelectedItem 
IL_000C: ldstr  "One" 
IL_0011: bne.un.s IL_001D 
IL_0013: ldstr  "OK" 
IL_0018: call  System.Console.WriteLine 
IL_001D: ldloc.0  // b 
IL_001E: callvirt System.Windows.Forms.ListControl.get_SelectedIndex 
IL_0023: brtrue.s IL_002F 
IL_0025: ldstr  "OK" 
IL_002A: call  System.Console.WriteLine 

Но мы находимся в области микро-оптимизации и, как сказано в комментарии, использовать то, что является более удобным для чтения для вас.

+0

Зачем вам вообще нужно проверять «ничего»? –

+1

Обычно SelectedItem используется внутри события SelectedIndexChanged, и вы должны помнить, что он может быть пустым, чтобы избежать NullReferenceExceptio. Я согласен, что в приведенном выше примере не требуется – Steve

2

SelectedIndex гарантированно уникален, SelectedItem не является

Смежные вопросы