Ref*_*din 6 .net c# types typechecking
好吧,这可能非常简单但是,我有以下"检查",(not at the same time)并且第一个 ALWAYS评估为TRUE,而第二个 SEEMS工作.这实际上发生在行值为数字或布尔值的每个地方(Date seems fine...).
如果我走通过代码调试它显示的数值row["PersonID"]为162434,一样tbxPersonID.EditValue.这只是我错过的编程的基本和初学真理hodge-podge-self-education吗?
看来,如果我把所有问题都string写成第一个,我会很好,我只想知道我是否正确,是否有一般规则Types我需要做什么呢?
if (row["PersonID"] != tbxPersonID.EditValue)
{
row["PersonID"] = tbxPersonID.EditValue;
}
if (row["CitizenFlag"] != chkCitizen.EditValue)
{
row["CitizenFlag"] = chkCitizen.EditValue;
_whatChanged.Add("CitizenFlag");
}
Run Code Online (Sandbox Code Playgroud)
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");
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 18
row["PersonID"]是object类型,这意味着!=和==将使用引用标识.基本上你是在比较盒装值.
如果您使用:
if (!object.Equals(row["PersonID"], tbxPersonID.EditValue))
Run Code Online (Sandbox Code Playgroud)
然后你会得到价值平等语义,我怀疑你会好起来的 - 假设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));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
436 次 |
| 最近记录: |