提问人:Tommaso Belluzzo 提问时间:11/9/2016 更新时间:11/10/2016 访问量:141
比较强制转换为对象的两个枚举值
Compare Two Enum Values Cast to Object
问:
我创建了一个自定义.在它里面有一个,在初始化期间填充了一个枚举器的值: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())
我仍然不确定这是否是正确的方法。
答:
2赞
Asik
11/9/2016
#1
我知道,我可以简单地将两个变量转换回枚举,然后 比较它们得到正确的结果。
这样做。默认情况下,对象相等是引用相等,即这两个引用指向内存中的同一位置。两个装箱枚举是位于内存中两个不同位置的两个对象,这就是为什么无论它们包含什么值,它们总是不相等的原因。
此外,通常最好尽可能多地保留类型信息;这使编译器可以帮助您编写正确的程序。键入变量 as 与此原则背道而驰。m_LastCategory
Object
评论