假设我有一个ComboBox
,其值为"一,二,三"
作为一般规则,在基于ComboBox
选择测试条件事件时,引用ComboBox.SelectedItem或ComboBox.SelectedIndex是否更好?
If (ComboBox.SelectedItem = "One")
或
If (ComboBox.SelectedIndex = 0)
或者两者都没有优势?
答案 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不是