Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从常规列表中删除重复项_C#_Linq - Fatal编程技术网

C# 从常规列表中删除重复项

C# 从常规列表中删除重复项,c#,linq,C#,Linq,我定义了一个对象,为它创建了一个IEqualityComparer类,并像这样使用它: someList.Distinct(new DistinctComparer()); 我认为这很有效,但我错了。比较器对象在Equals方法中指定对象的11个属性。我意识到删除的重复项是随机的 有一个额外的财产,我想删除的基础上,一个日期。因此,对于11个属性中有重复项的对象,我希望保留最近日期的对象,其属性不包括在Equals方法中 如果重要的话,对象是USPS定义的美国地址。Equals方法:

我定义了一个对象,为它创建了一个IEqualityComparer类,并像这样使用它:

someList.Distinct(new DistinctComparer());
我认为这很有效,但我错了。比较器对象在Equals方法中指定对象的11个属性。我意识到删除的重复项是随机的

有一个额外的财产,我想删除的基础上,一个日期。因此,对于11个属性中有重复项的对象,我希望保留最近日期的对象,其属性不包括在Equals方法中

如果重要的话,对象是USPS定义的美国地址。Equals方法:

      public bool Equals(Address x, Address y)
     {
        return x.HouseNo == y.HouseNo &&
           x.PreDir == y.PreDir &&
           x.StreetName == y.StreetName &&
           x.StreetSuffix == y.StreetSuffix &&
           x.PostDir == y.PostDir &&
           x.City  == y.City &&
           x.State == y.State &&
           x.Zip5 == y.Zip5 &&
           x.Zip4 == y.Zip4 &&
           x.Sud == y.Sud &&
           x.UnitNum == y.UnitNum;
     }
我不知道如何保留最近销售日期的地址。有什么线索吗?谢谢

因此,对于11个属性中有重复项的对象,我希望保留最近日期的对象,其属性不包括在Equals方法中

实际上,
Distinct
将保留(或者更确切地说,产生)任何相等值中的第一个。因此,您可以先按日期反向订购:

var results = someList.OrderByDescending(x => x.Date)
                      .Distinct(new CustomComparerWhichIgnoresDate());
这种行为无法保证,但看到它的变化我会感到震惊——这是最简单、最明显的方法。(请参阅了解更多详细信息)您是否愿意依赖这种未记录的行为取决于您-LINQ中有很多对象没有记录,但我很有信心依赖它们

因此,对于11个属性中有重复项的对象,我希望保留最近日期的对象,其属性不包括在Equals方法中

实际上,
Distinct
将保留(或者更确切地说,产生)任何相等值中的第一个。因此,您可以先按日期反向订购:

var results = someList.OrderByDescending(x => x.Date)
                      .Distinct(new CustomComparerWhichIgnoresDate());

这种行为无法保证,但看到它的变化我会感到震惊——这是最简单、最明显的方法。(有关更多详细信息,请参阅。)您是否愿意依赖这种未记录的行为取决于您-LINQ中有很多未记录的对象,但我很有信心依赖它们。

很好,但这是根据规范,还是这只是一个独特的实现细节(可能在理论上发生变化,或可能在单声道等方面有所不同)?是的,很多应用程序都会崩溃,而微软几乎从来没有这样做过。而且,没有理由改变。我也相信这一点。我同意没有理由改变。我只是想知道这是否符合规范。@JakubJanuszkiewicz:正如我在回答中所说,这种行为不一定会发生。@Jon Skeet:我现在可以看到了。我一定有办法当我发表评论时没有注意到。不错,但这是根据规范,还是仅仅是一个独特的实现细节(可能会在理论上发生变化,或者在Mono中可能会有所不同)?是的,很多应用程序都会崩溃,而微软几乎从来没有这样做过。而且,没有理由改变。我也相信这一点。我同意没有理由改变。我只是想知道这是否符合规范。@JakubJanuszkiewicz:正如我在回答中所说,这种行为不一定会发生。@Jon Skeet:我现在可以看到了。我一定有办法当我评论时错过了它。