我只需要一點點確認只選擇價值...C#的WinForms組合框 - 從對象
我填我的組合框,如下所示:
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 suggests:
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());
所以,我確認是,那是正確的(如,它是一個可以接受的最佳實踐)做我等於以下(尋找「加這個」):
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);
}
謝謝!
這正是我問這個問題的原因。這看起來很酷。看起來我不必像我那樣修改Equals,而是可以像這樣搜索它。 (當我說話時,比較我腦中的兩個人)。謝謝回覆! – JustLooking
@Cuong +1爲優雅的解決方案,但你不同意整體解決方案不是最好的解決方案?看看我的答案,並告訴我是否脫離基地。 –
@Mike - 是的,我想看到一個討論,正如我提到的,我們避免數據綁定組合。也許這是一個糟糕的決定。 – JustLooking