C#条件语句不';不能返回真值

C#条件语句不';不能返回真值,c#,return,conditional-statements,C#,Return,Conditional Statements,我有一个比较两个整数的条件,但它永远不会返回true,即使两个数字相等 foreach (TreeViewItem item in Categories.Items) { if (subCategory.Tag == item.Tag) { item.Items.Add(subCategory); } } 这两个

我有一个比较两个整数的条件,但它永远不会返回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);

即使两个值相等,条件也将返回false,并且不会到达
item.Items.Add(子类别)

有人知道我错过了什么吗? 两者的类型相同(int)。。。
谢谢

请尝试使用
等于

if (object.Equals(subCategory.Tag, item.Tag)){
 //...
}
你所做的比较会比较引用,所以它们当然是不相等的

foreach (TreeViewItem item in Categories.Items)
            {
                if (subCategory.Tag == item.Tag)
                {
                    item.Items.Add(subCategory);
                }
            }
您还可以将每个
标记
强制转换为
int
,并比较强制转换的结果,但在这种情况下使用
Equals
更方便

请注意,对象还有一个
Equals
方法,您也可以使用该方法,但如果对象为
null
,则不安全

//subCategory.Tag should not be null
if (subCategory.Tag.Equals(item.Tag)){
   //...
}

TrieViewItem.Tag属于对象类型。当您将原语指定给对象引用时,它们将转换为相应的类,在您的例子中是Integer

当您使用==运算符比较引用类型时,您(除非运算符重载)会比较对象引用。==运算符仅在将引用与自身进行比较时才会返回true。由于整数值包装在两个不同的对象中,==将永远不会返回true

您可以在MSDN上阅读更多信息

在您的案例中,正确的比较方法是:

if (object.Equals(subCategory.Tag, item.Tag))
{
   ...
}