首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Distinct()方法不起作用吗?

Distinct()方法不起作用吗?
EN

Stack Overflow用户
提问于 2015-05-14 15:38:41
回答 1查看 194关注 0票数 1

我尝试使用Distinct()来筛选我的集合,以防止重复,但是linq查询仍然添加相同的值来列出。

提前谢谢。

代码语言:javascript
运行
复制
 public ObservableCollection<string> CollectTopicsFromXml()
    {
         ObservableCollection<string> oc = new ObservableCollection<string>();
         XDocument xDoc = XDocument.Load(path);
         var topicColl = xDoc.Descendants("topic").Distinct();


         foreach (var topic in topicColl)
         {
             oc.Add(topic.Value);
         }

        return oc;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-14 15:43:43

默认情况下,Distinct使用引用相等,除非Equals (和GetHashCode)在项类型上被重写。因为Equals不为XElement重写,因此每个元素都是“不同的”,而不管其内容如何。

如果您希望通过Name或其他一些属性(或属性的组合)来区分元素,那么您有几个选项:

  • 将元素投影到匿名类型,该类型在默认情况下实现值相等: 变量topicColl = xDoc.Descendants("topic") .Select(e => new {e.Name,e.Value}) .Distinct();
  • 使用GroupBy,它允许传入表达式
  • 创建一个按您希望的方式实现IEqualityComparer<XElement>的类,并将其传递给Distinct
  • 使用DistinctBy from MoreLinq,它还允许传入相等表达式
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30241432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档