使用LINQ foreach返回布尔值

时间:2019-05-14 17:12:10

标签: c# linq

我正在寻找一种与LINQ交换类属性的普通foreach循环的方法,但是LINQ foreach返回void。这是代码(目前无法使用):

  public override bool Equals(object obj)
    {
        if (obj == this)
            return true;
        if (obj == null)
            return false;
        if (obj.GetType() != this.GetType())
            return false;
        //foreach (var e in properties)
        //{
        //    if (Equals(e.GetValue(obj), e.GetValue(this)))
        //        continue;
        //    else return false;
        //}
       return properties.ToList().ForEach((e => Equals(e.GetValue(obj), e.GetValue(this)));

    }

有什么建议吗?感谢您的建议!

2 个答案:

答案 0 :(得分:3)

您尚未指定,但我想您希望对结果进行AND编辑-也就是说,如果任何属性相等返回false,则返回false;当且仅当所有属性相等返回true时,才返回true

return properties.All(e => e.Equals(e.GetValue(obj), e.GetValue(this));

foreach解决方案(仅供参考)是在找到的第一个false值上简单地返回false,并在循环外返回true:

foreach (var e in properties)
{
    if (!Equals(e.GetValue(obj), e.GetValue(this)))
        return false;
}
return true; // all passed

答案 1 :(得分:1)

尝试以您喜欢的方式汇总结果:

 public override bool Equals(object obj)
 {
   if (obj == this)
     return true;
   if (obj == null)
     return false;
   if (obj.GetType() != this.GetType())
     return false;
   return properties.Aggregate(true, (acc, e) => acc && Equals(e.GetValue(obj), e.GetValue(this)));
}