我有以下代码返回false:
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;
}
Run Code Online (Sandbox Code Playgroud)
这是令人惊讶的,因为只有一个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"}
Run Code Online (Sandbox Code Playgroud)
我在这里忽略了什么?在比较整数值时,我使用!=和=="无处不在".
当你这样做时:
(row1[fieldNames[i]] != row2[fieldNames[i]])
Run Code Online (Sandbox Code Playgroud)
row[x]给你一个object看http://msdn.microsoft.com/en-us/library/146h6tk5.aspx
如果您与对象进行==比较,则比较参考.
你必须转换为他们的原始数据类型或与之比较 obj.Equals(obj2)
例如:
object a = 2;
object b = 2;
if (a == b)
Debug.WriteLine("== = true");
if (a.Equals(b))
Debug.WriteLine("equals = true");
Run Code Online (Sandbox Code Playgroud)
调试输出:
equals = true