【发布时间】:2017-03-22 19:08:56
【问题描述】:
我创建了一个自定义UserControl。在它里面有一个ComboBox,它在初始化期间填充了一个枚举器的值:
m_ComboBox.Items.AddRange((Object[])Enum.GetValues(typeof(Categories)));
因为我想跟踪以前的ComboBox.SelectedItem,所以我创建了一个变量来存储它的最后一个值:
private Object m_LastCategory;
private void ComboBoxSelectedIndexChanged(Object sender, EventArgs e)
{
if (m_ComboBox.SelectedItem != m_LastCategory)
DoSomething();
m_LastCategory = m_ComboBox.SelectedItem;
}
if 语句未按预期工作。实际上,即使m_LastCategory 和当前的SelectedItem 不同(我肯定知道),它总是返回true。
我知道,我可以简单地将两个变量都转换回枚举,然后比较它们以获得正确的结果。但我使用Object 是为了避免对值进行不断的装箱/拆箱,并使我的代码更加优雅。所以我想知道是否有办法处理这个问题。
到目前为止,我发现的唯一可行的选择是这个:
if (m_ComboBox.SelectedItem.ToString() != m_LastCategory.ToString())
我仍然不确定这是一个正确的方法。
【问题讨论】:
标签: c# .net enums casting equality