2012-02-28 6 views
1

私は、以下を使用していくつかのStaffRoleファイルをコンボボックスに挿入しました。IndexOfを使用してコンボボックスを検索する

for (int i=0; i < staffRoles.Count; i++) 
     { 
      user_Role_Combo.Items.Add(staffRoles[i]); 
     } 

私がロードされ、私はこれを持っているとき、それは正しい要素を表示するように、コンボボックス内の特定の要素のインデックスを検索しようとしているが、それは単に-1を返すたびに、

StaffRole sr = new StaffRole("",roleID); 
int comboBoxID = user_Role_Combo.Items.IndexOf(sr); 

これは正しい方法ではありませんか?

+0

これはあなたの 'StaffRole.Equals'方法をご提示くださいWPFまたはリサイズ –

+0

であるかどうかによって異なります。

だから、私は、コレクション内の適切な要素を見つけるためにいくつかのLINQを使用していました。 – dasblinkenlight

+0

'user_Role_Combo'のタイプは何ですか? – Shai

答えて

3

新しいStaffRoleインスタンスがコンボボックスで「検出」されるためには、2つのStaffRoleインスタンスが同等であるとみなされる理由を説明する必要があります。

EqualsGetHashCodeを上書きする必要があります。技術的には、Equalsのみ必要ですが、これらの2つの方法を一緒にオーバーライドする必要があります。それに対処するために

一つの方法は、このように、roleId平等上のベースオブジェクトの平等にある:

public override int GetHashCode() { 
     return roleId.GetHashCode(); 
    } 

    public override bool Equals(object obj) { 
     if (obj == this) return true; 
     var other = obj as StaffRole; 
     if (other == null) return false; 
     return roleId == other.roleId; 
    } 
+0

ありがとうございました。 – r0bb077

0

これは正しい方法ではありませんか。

デフォルトでは、IndexOfはアイテムリストに同じ参照が存在するかどうかをチェックします。あなたが今インスタンス化した新しいStaffRoleであるため、リストには存在しません。

IDで比較したいと思います。これを行うには、StaffRoleクラスのEqualsGetHashCodeを上書きできます。カスタムEqualsメソッドでは、2つのオブジェクトをロールIDで比較します。これを実行した後、IndexOfは、参照の代わりにIDを使用して比較することで、期待どおりに動作します。

0

おそらく、あなたはどちらか

  • FINDSTRING(String)を
  • FindStringExact(String使用でき)

どちらのメソッドも、インデックスo fメソッドが受け取る文字列パラメータの値と一致するリスト内の要素。

コンボボックスdocumentation here.

0

私は異なるインスタンスに対して異なるようにそれらを必要と私は同じ/ハッシュコードmehtodsを交換したくありませんでした。

this.comboBox_group.SelectedIndex = 
    this.comboBox_group.Items.IndexOf 
    (comboBox_group.Items.Cast<Group>().Where(x => x.Id == SelectedId).First()); 
関連する問題