gpt4 book ai didi

c# - 仅使用 LINQ 时使用 IEquatable 比较两个集合

转载 作者:太空狗 更新时间:2023-10-29 22:30:23 26 4
gpt4 key购买 nike

此问题仅用于教育目的,我可以使用 for 轻松解决它返回 false 的循环在第一次不匹配时。

我正在实现 IEquatable<CustomerFeedbackViewModel>CustomerFeedbackViewModel其中有 QuestionViewModel 的集合我需要逐个元素进行比较。

public class CustomerFeedbackViewModel 
{
public List<QuestionViewModel> Questions { get; set; }

public string PageName { get; set; }

public string SessionId { get; set; }
}

实现时 Equals而不是使用 for我上面提到的循环我想使用 TrueForAll方法如下所示。

public bool Equals(CustomerFeedbackViewModel other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return Questions.TrueForAll((o,i) => o.Equals(other.Questions.ElementAt(i))) && string.Equals(PageName, other.PageName) && string.Equals(SessionId, other.SessionId);
}

办公室TrueForAll没有索引和以上永远不会飞。

我如何在不使用 for 的情况下实现两个列表的比较?循环而是使用 linq 'oneliner'?

最佳答案

您应该使用 Enumerable.SequenceEqual 而不是比较所有索引的每个问题:

return string.Equals(PageName, other.PageName) 
&& string.Equals(SessionId, other.SessionId)
&& Questions.SequenceEqual(other.Questions);

如果你不覆盖 Equals + GethashCodeQuestionViewModel您可以提供自定义 IEqualityComparer<QuestionViewModel> 并将其传递给 SequenceEqual重载或实现 IEquatable<QuestionViewModel> .

关于c# - 仅使用 LINQ 时使用 IEquatable 比较两个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35150111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com