C#条件语句不';不能返回真值
我有一个比较两个整数的条件,但它永远不会返回true,即使两个数字相等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); } } 这两个
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))
{
...
}