.net 联合中的IEqualityComparer未比较预期值

.net 联合中的IEqualityComparer未比较预期值,.net,iequalitycomparer,.net,Iequalitycomparer,我试图用NAN来“填补”一组时间数据中的空白,以便于作图。我试图通过为所有可能的时间段创建一组NAN数据并使用联合将它们合并在一起来实现这一点。我希望真实数据覆盖NAN值,留下我想要的数据集 以下是我设置NAN数据集和覆盖(使用以前获得的AveragedData)的代码: 这是SensorValueComparer。起初,我只是进行了“比较”并测试了0,但它没有达到任何值,所以我测试了在两个日期完全相同时添加一个断点(对于分钟数据,这种情况应该经常发生)。但那个断点也不会被击中。我已经检查并合并

我试图用NAN来“填补”一组时间数据中的空白,以便于作图。我试图通过为所有可能的时间段创建一组NAN数据并使用联合将它们合并在一起来实现这一点。我希望真实数据覆盖NAN值,留下我想要的数据集

以下是我设置NAN数据集和覆盖(使用以前获得的AveragedData)的代码:

这是SensorValueComparer。起初,我只是进行了“比较”并测试了0,但它没有达到任何值,所以我测试了在两个日期完全相同时添加一个断点(对于分钟数据,这种情况应该经常发生)。但那个断点也不会被击中。我已经检查并合并数据包含两个数据集,以及测量数据相等的场合

    public class SensorValueComparer : IEqualityComparer<SensorValue>
    {
        public bool Equals(SensorValue x, SensorValue y)
        {
            var ret = x.MeasureTime.CompareTo(y.MeasureTime);
            if (x.MeasureTime.ToOADate() == y.MeasureTime.ToOADate())// && x.MeasureTime.Hour == y.MeasureTime.Hour && x.MeasureTime.Minute == y.MeasureTime.Minute)
            {
                System.Console.WriteLine("Test");
            }
            return ret == 0;
        }

        public int GetHashCode(SensorValue obj)
        {
            return obj.MeasureTime.GetHashCode();
        }
    }
公共类SensorValueComparer:IEqualityComparer
{
公共布尔等于(传感器值x,传感器值y)
{
var ret=x.MeasureTime.CompareTo(y.MeasureTime);
如果(x.MeasureTime.ToOADate()==y.MeasureTime.ToOADate())/&&x.MeasureTime.Hour==y.MeasureTime.Hour&&x.MeasureTime.Minute==y.MeasureTime.Minute)
{
系统控制台写入线(“测试”);
}
返回ret==0;
}
公共整数GetHashCode(SensorValue obj)
{
返回obj.MeasureTime.GetHashCode();
}
}
有人能解释为什么这个联合函数不能正确合并重复项吗?我用错了吗


干杯

我用Linq声明而不是工会解决了这个问题。我不得不重新分组,因为以前的方法不能产生精确到分钟的时间:

        //merge Data
        var mergedData = (nullData.Concat(AveragedData)
                                 .GroupBy(x => {
                                        return new DateTime(x.MeasureTime.Year, x.MeasureTime.Month, x.MeasureTime.Day,
                                            x.MeasureTime.Hour, x.MeasureTime.Minute, 0);
                                    })
                                 .Select(g => new SensorValue
                                 {
                                     MeasureTime = g.Key,
                                     Value = g.Max(x => x.Value)
                                 }).OrderBy(x => x.MeasureTime)).ToList();

Union
只返回第二个集合中不在第一个集合中的项目,如果
nullData
集合包含
AveragedData
中的所有值(根据比较器),则输出中将不会返回
AveragedData
中的任何项目。试着在
联合中切换它们。我最初是这样做的,它们都返回相同的集合(两组值都在中)。
        //merge Data
        var mergedData = (nullData.Concat(AveragedData)
                                 .GroupBy(x => {
                                        return new DateTime(x.MeasureTime.Year, x.MeasureTime.Month, x.MeasureTime.Day,
                                            x.MeasureTime.Hour, x.MeasureTime.Minute, 0);
                                    })
                                 .Select(g => new SensorValue
                                 {
                                     MeasureTime = g.Key,
                                     Value = g.Max(x => x.Value)
                                 }).OrderBy(x => x.MeasureTime)).ToList();