我有一个比较两个整数的条件,但即使两个数字相等也不会返回true。
foreach (TreeViewItem item in Categories.Items)
{
if (subCategory.Tag == item.Tag)
{
item.Items.Add(subCategory);
}
}
两者都是TreeviewItem的属性
TreeViewItem catItem = new TreeViewItem();
catItem.Tag = (int)row["CategoryID"];
Categories.Items.Add(catItem);
和
TreeViewItem subCategory = new TreeViewItem();
subCategory.Tag = (int)row["CategoryID"];
即使两个值都相等,条件也会返回false并且不会达到item.Items.Add(subCategory);
有谁知道我错过了什么? 两者属于同一类型(int)...... 感谢
答案 0 :(得分:10)
请尝试使用Equals
:
if (object.Equals(subCategory.Tag, item.Tag)){
//...
}
比较你所做的比较参考,所以它们当然是不相等的。
您还可以将每个Tag
投放到int
并比较投放结果,但在这种情况下使用Equals
会更方便。
请注意,对象也有Equals
方法,您也可以使用此方法但如果对象为null
则不安全。
//subCategory.Tag should not be null
if (subCategory.Tag.Equals(item.Tag)){
//...
}
答案 1 :(得分:3)
TrieViewItem.Tag是对象类型。将基元分配给对象引用时,它们将转换为相应的类,在您的情况下为Integer。
使用==运算符比较引用类型时(除非运算符过载)比较对象引用。只有在比较对自身的引用时,==运算符才会返回true。由于您的整数值包含在两个不同的对象中,因此==将永远不会返回true。
您可以在MSDN上阅读有关object equality的更多信息。
在您的情况下比较的正确方法是:
if (object.Equals(subCategory.Tag, item.Tag))
{
...
}