4

假设我有一个ComboBox值“一,二,三”

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

If (ComboBox.SelectedItem = "One") 

或者

If (ComboBox.SelectedIndex = 0)

还是两者都没有优势?

4

2 回答 2

6

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

通常在 SelectedIndexChanged 事件中使用 SelectedItem 和 SelectedIndex,很容易忘记 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

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

于 2013-05-09T20:56:08.237 回答
3

SelectedIndex 保证是唯一的,SelectedItem 不是

于 2013-05-09T20:56:45.367 回答