加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 比较类型对象的表达式

发布时间:2020-12-15 18:14:41 所属栏目:百科 来源:网络整理
导读:好吧,这可能非常简单但是,我有下面的“检查”(不是同时),并且第一个ALWAYS评估为TRUE,而第二个SEEMS工作.这实际上发生在行值为数字或布尔值的每个地方(日期似乎很好……). 如果我遍历Debug中的代码,它会将row [“PersonID”]的值显示为162434,与tbxPersonID.
好吧,这可能非常简单但是,我有下面的“检查”(不是同时),并且第一个ALWAYS评估为TRUE,而第二个SEEMS工作.这实际上发生在行值为数字或布尔值的每个地方(日期似乎很好……).

如果我遍历Debug中的代码,它会将row [“PersonID”]的值显示为162434,与tbxPersonID.EditValue相同.这只是一个关于编程的基本和初学真理,我在我的大学自我教育中错过了吗?

看来,如果我首先将所有问题都转换为字符串,我会很好,我只想知道我是否正确,是否有一般规则我需要做什么类型?

不起作用

if (row["PersonID"] != tbxPersonID.EditValue)
{
    row["PersonID"] = tbxPersonID.EditValue;
}
if (row["CitizenFlag"] != chkCitizen.EditValue)
{
    row["CitizenFlag"] = chkCitizen.EditValue;
    _whatChanged.Add("CitizenFlag");
}

作品

if (row["PersonID"].ToString() != tbxPersonID.EditValue.ToString())
 {
     row["PersonID"] = tbxPersonID.EditValue;
 }

 if (row["CitizenFlag"].ToString() != chkCitizen.EditValue.ToString())
 {
     row["CitizenFlag"] = chkCitizen.EditValue;
     _whatChanged.Add("CitizenFlag");
 }

解决方法

row [“PersonID”]是object类型,这意味着!=和==将使用引用标识.基本上你是在比较盒装值.

如果您使用:

if (!object.Equals(row["PersonID"],tbxPersonID.EditValue))

然后你会得到价值平等语义,我怀疑你会没事 – 假设tbxPersonID确实是一个int,无论是盒装还是非盒装.

只是为了使事情具体化,这里有一个简短但完整的例子来展示我在说什么:

using System;

class Test
{
    static void Main()
    {
        object first = 2;
        object second = 2;

        // Compares reference equality: false
        Console.WriteLine(first == second);

        // Compares value equality: true
        Console.WriteLine(object.Equals(first,second));
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读