我只需要一点点确认只选择价值...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