除Lambda表达式外,还会过滤重复项

时间:2016-01-20 06:38:45

标签: c# lambda except

如果我正确理解除了lambda的行为,它应该返回col1中存在但不存在col2中的所有项。 在下面的示例中,它应该返回具有空ID的两个项目。 问题:它只返回一个带有空ID的项目......

        var col2 = new List<StaffSkill>
        {
            new StaffSkill { SkillID = "12" },
        };

        var col1 = new List<StaffSkill>
        {
            new StaffSkill { SkillID = "12" },
            new StaffSkill { SkillID = null },
            new StaffSkill { SkillID = null },
        };

        var res = col1.Except(col2);
        if (res.Any())
        {  }

StaffSkill在哪里

public class StaffSkill
{
    public string SkillID { get; set; }

    protected bool Equals(StaffSkill other)
    {
        return string.Equals(SkillID, other.SkillID, StringComparison.OrdinalIgnoreCase);
    }

    public override bool Equals(object obj)
    {
        if (ReferenceEquals(null, obj)) return false;
        if (ReferenceEquals(this, obj)) return true;
        if (obj.GetType() != this.GetType()) return false;
        return Equals((StaffSkill) obj);
    }

    public override int GetHashCode()
    {
        return (SkillID != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(SkillID) : 0);
    }
}

是否有对此行为的解释。似乎Except lambda还过滤了col1集合中具有相同ID的项目......

我错过了什么?

谢谢你, 的Sebastien

1 个答案:

答案 0 :(得分:0)

这似乎是该方法应该如何工作。请参阅msdn documentation中的评论部分,尽管我同意应在文档中更明确地说明

为了得到重复,我会去那样打电话:

<SolidColorBrush x:Key="LoopingSelectorSelectionBackgroundThemeBrush" Color="#FFD84E53" />

我想在某些情况下可能会慢一些。