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

前端之家收集整理的这篇文章主要介绍了c# – 比较类型对象的表达式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
好吧,这可能非常简单但是,我有下面的“检查”(不是同时),并且第一个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));
    }
}
原文链接:https://www.f2er.com/csharp/97917.html

猜你在找的C#相关文章