ComboBox
「One、Two、Three」という値を持つ があるとしましょう
原則として、ComboBox
選択に基づく条件付きイベントをテストする場合、ComboBox.SelectedItem または ComboBox.SelectedIndex を参照する方がよいでしょうか?
If (ComboBox.SelectedItem = "One")
また
If (ComboBox.SelectedIndex = 0)
それとも、どちらにも利点はありませんか?
ComboBox
「One、Two、Three」という値を持つ があるとしましょう
原則として、ComboBox
選択に基づく条件付きイベントをテストする場合、ComboBox.SelectedItem または ComboBox.SelectedIndex を参照する方がよいでしょうか?
If (ComboBox.SelectedItem = "One")
また
If (ComboBox.SelectedIndex = 0)
それとも、どちらにも利点はありませんか?
SelectedIndex
数値で作業でき、選択がない場合はヌルを処理する必要がないため、使いやすいと思います。SelectedItem は null になる可能性があり、そのプロパティにアクセスしようとするときはこれを覚えておく必要があります。
通常、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
しかし、私たちはマイクロ最適化の領域にあり、コメントで述べたように、より読みやすいものを使用します.
SelectedIndex は一意であることが保証されていますが、SelectedItem はそうではありません