4

ComboBox「One、Two、Three」という値を持つ があるとしましょう

原則として、ComboBox選択に基づく条件付きイベントをテストする場合、ComboBox.SelectedItem または ComboBox.SelectedIndex を参照する方がよいでしょうか?

If (ComboBox.SelectedItem = "One") 

また

If (ComboBox.SelectedIndex = 0)

それとも、どちらにも利点はありませんか?

4

2 に答える 2

6

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

しかし、私たちはマイクロ最適化の領域にあり、コメントで述べたように、より読みやすいものを使用します.

于 2013-05-09T20:56:08.237 に答える
3

SelectedIndex は一意であることが保証されていますが、SelectedItem はそうではありません

于 2013-05-09T20:56:45.367 に答える