ちょっと確認が必要です...
私は次のようにコンボボックスを埋めています:
myCombo.Items.Add(new ComboBoxInt32Data("Red", 0));
myCombo.Items.Add(new ComboBoxInt32Data("Green", 1));
myCombo.Items.Add(new ComboBoxInt32Data("Yellow", 2));
myCombo.Items.Add(new ComboBoxInt32Data("Blue", 3));
これで、データベーステーブルから値を取得するとき、整数値だけが得られます。
私のオーバーライドされたEqualsは、msdnが提案する方法とまったく同じように見えます。
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
ComboBoxInt32Data data = obj as ComboBoxInt32Data;
if ((object)data == null)
{
return false;
}
return (m_Name.ToUpper() == data.Name.ToUpper() && m_Value == data.Value);
}
しかし、私が言ったように、私にはただの価値があります。私は行って次のことをする必要はありません:
Int32 DatabaseValue = SomeFunctionThatRetrivedMeThisIntValueFromDB();
string TheValueName = SomeFunctionThatDoesALookUpToGetTheName(DatabaseValue);
myCombo.SelectedIndex = myCombo.Items.IndexOf(new ComboBoxInt32Data(TheValueName, DatabaseValue));
私はむしろ次のことをしたいです:
myCombo.SelectedIndex = myCombo.Items.IndexOf(SomeFunctionThatRetrivedMeThisIntValueFromDB());
したがって、私の確認は、私のEqualsで次のことを実行しても問題ないか(のように、許容できるベストプラクティスですか)です(「addedthis」を探してください)。
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
// added this
if (obj is Int32)
{
Int32 value = (Int32)obj;
return m_Value == value;
}
ComboBoxInt32Data data = obj as ComboBoxInt32Data;
if ((object)data == null)
{
return false;
}
return (m_Name.ToUpper() == data.Name.ToUpper() && m_Value == data.Value);
}
ありがとう!