C#Condition语句不返回true

时间:2013-12-02 02:31:11

标签: c# return conditional-statements

我有一个比较两个整数的条件,但即使两个数字相等也不会返回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)...... 感谢

2 个答案:

答案 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))
{
   ...
}