最好将SelectedIndex或SelectedItem用于ComboBox?

时间:2013-05-09 20:51:03

标签: vb.net

假设我有一个ComboBox,其值为"一,二,三"

作为一般规则,在基于ComboBox选择测试条件事件时,引用ComboBox.SelectedItem或ComboBox.SelectedIndex是否更好?

If (ComboBox.SelectedItem = "One") 

If (ComboBox.SelectedIndex = 0)

或者两者都没有优势?

2 个答案:

答案 0 :(得分:5)

我发现SelectedIndex更容易使用,因为您可以使用数字,当没有选择时,您不必处理空值。 SelectedItem可以为null,您在尝试访问该属性时应该记住这一点。

通常SelectedIntem和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

但我们处于微观优化领域,正如评论中所述,使用对您更具可读性的内容。

答案 1 :(得分:3)

SelectedIndex保证是唯一的,SelectedItem不是