编程语言
首页 > 编程语言> > c# – Linq / Enumerable任何Vs包含

c# – Linq / Enumerable任何Vs包含

作者:互联网

我已经解决了我遇到的一个问题但是虽然我已经发现了某些东西是如何工作的(或者没有)我不明白为什么.

因为我是那种喜欢知道“为什么”的人,我希望有人可以解释:

我有项目列表和相关评论,我想区分管理员评论和用户评论,所以我尝试了以下代码:

User commentUser = userRepository.GetUserById(comment.userId);
Role commentUserRole = context.Roles.Single(x=>x.Name == "admin");
if(commentUser.Roles.Contains(commentUserRole)
 {
   //do stuff
 }
else
{
 // do other stuff
}

单步执行代码显示虽然它具有正确的Role对象,但它无法识别commentUser.Roles中的角色

最终有效的代码是:

if(commentUser.Roles.Any(x=>x.Name == "admin"))
{
  //do stuff
}

我对此感到高兴,因为它的代码较少,而且我认为更干净,但我不明白包含什么不起作用.

希望有人能为我解决这个问题.

解决方法:

这可能是因为您没有覆盖Role类上的相等比较(Equals,GetHashCode,operator ==).因此,它正在进行参考比较,这实际上并不是最好的主意,好像它们不是同一个对象,它让它认为它是不同的.您需要覆盖这些相等运算符以提供值相等.

标签:c,linq,enumerable
来源: https://codeday.me/bug/20190713/1450092.html