【发布时间】:2013-06-03 16:46:03
【问题描述】:
我有以下返回错误的代码:
private static bool AreRowsEqual(string[] fieldNames, DataRow row1, DataRow row2)
{
for (var i = 0; i <= fieldNames.Length - 1; i++)
{
if (row1[fieldNames[i]] != row2[fieldNames[i]])
{
return false;
}
}
return true;
}
这是令人惊讶的,因为只有一个 long 类型的字段被比较,并且每个字段的值都根据即时窗口输出匹配:
?row1[fieldNames[i]];
34
?row2[fieldNames[i]];
34
?row1[fieldNames[i]].GetType();
{Name = "Int64" FullName = "System.Int64"}
[System.RuntimeType]: {Name = "Int64" FullName = "System.Int64"}
? row2[fieldNames[i]].GetType();
{Name = "Int64" FullName = "System.Int64"}
[System.RuntimeType]: {Name = "Int64" FullName = "System.Int64"}
我在这里忽略了什么?在比较整数的值时,我使用 != 和 == "everywhere"。
【问题讨论】:
-
你能发布两个数据行的全部内容吗?在你的例子中 34 != 34 是假的,所以它不能返回假,因此问题将出在其他值上。
-
嗯,这就是我的想法,但显然 GetType()==Int64 根据答案不是“正确的”。类型实际上是对象。