我正在寻找一种与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)));
}
有什么建议吗?感谢您的建议!
答案 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)));
}