我有两个不同名称的相同文件,用于填充两个不同的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");
}
答案 0 :(得分:1)
我只能猜测,Df2["Header1",3]
会返回object
。
如果你看下面的链接
== operator MSDN,您会看到==
的{{1}}的默认实现只有在它是同一个对象(堆上的相同地址)时才会返回reference types
。
由于true
和Df1["Header1",3]
是两个不同的对象Df2["Header1",3]
,因此运算符返回==
。将结果转换为false
时,会使用值比较(请参阅上面的相同链接),string
运算符返回==
。
根据Deedle ReadCsv文档,只推断了原始类型,因此,如果该列包含日期,则返回类型将是导致上述行为的对象