1

我有两个名称不同的相同文件,用于填充两个不同的 Deedle 数据帧。然而,当我尝试比较两个数据框中的相同值时,程序认为它们不相等。

var Df1 = Frame.ReadCsv("C:/File1.csv");
var Df2 = Frame.ReadCsv("C:/File2.csv");

if (Df1["Header1", 3] == Df2["Header1",3])
{
  Console.WriteLine("The computer sees them as equal");
}
else
{
  Console.WriteLine("The computer sees them as not equal");
}

如果我同时转换两个值,那么计算机会将它们视为相等。无论如何确定这两个值是否相等而不强制转换它们?

var Df1 = Frame.ReadCsv("C:/File1.csv");
var Df2 = Frame.ReadCsv("C:/File2.csv");

if ((string)Df1["Header1", 3] == (string)Df2["Header1",3])
{
  Console.WriteLine("The computer sees them as equal");
}
else
{
  Console.WriteLine("The computer sees them as not equal");
}
4

1 回答 1

1

我只能猜测,它Df2["Header1",3]返回一个object.
如果您查看以下链接 == operator MSDN,您将看到 ==for 的默认实现仅在它是相同对象(堆上的相同地址)时才 reference types返回。由于和是两个不同的对象,运算符返回。当您将结果转换为 时,将使用值比较(参见上面的相同链接)并且运算符返回。 根据Deedle ReadCsv文档,仅推断原始类型,因此,如果该列包含日期,则返回类型将是导致上述行为的对象true
Df1["Header1",3]Df2["Header1",3]==falsestring==true

于 2015-06-30T02:45:32.963 回答