作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经解决了我遇到的一个问题,但虽然我已经发现了某些东西是如何工作的(或没有),但我不清楚为什么。
因为我是那种喜欢知道“为什么”的人,所以我希望有人能解释一下:
我有项目列表和相关评论,我想区分管理员评论和用户评论,所以我尝试了以下代码:
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
}
我对此很满意,因为它的代码更少,而且在我看来更清晰,但我不明白 contains 为什么不起作用。
希望有人能帮我解决这个问题。
最佳答案
这可能是因为您没有覆盖相等比较(Equals
、GetHashCode
、operator==
) 在您的 Role
类中。因此,它在进行引用比较,这确实不是最好的主意,就好像它们不是同一个对象,它让它认为它是不同的。您需要重写那些相等运算符以提供值相等。
关于c# - Linq/Enumerable Any Vs 包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18058655/
我是一名优秀的程序员,十分优秀!