假设我有一个ComboBox
值“一,二,三”
作为一般规则,在基于ComboBox
选择测试条件事件时,引用 ComboBox.SelectedItem 还是 ComboBox.SelectedIndex 会更好吗?
If (ComboBox.SelectedItem = "One")
或者
If (ComboBox.SelectedIndex = 0)
还是两者都没有优势?
假设我有一个ComboBox
值“一,二,三”
作为一般规则,在基于ComboBox
选择测试条件事件时,引用 ComboBox.SelectedItem 还是 ComboBox.SelectedIndex 会更好吗?
If (ComboBox.SelectedItem = "One")
或者
If (ComboBox.SelectedIndex = 0)
还是两者都没有优势?
我发现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
但是我们处于微优化领域,正如评论中所说,使用对您来说更具可读性的内容。
SelectedIndex 保证是唯一的,SelectedItem 不是