我尝试使用Distinct()来筛选我的集合,以防止重复,但是linq查询仍然添加相同的值来列出。
提前谢谢。
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;
}
发布于 2015-05-14 07:43:43
默认情况下,Distinct
使用引用相等,除非Equals
(和GetHashCode
)在项类型上被重写。因为Equals
不为XElement
重写,因此每个元素都是“不同的”,而不管其内容如何。
如果您希望通过Name
或其他一些属性(或属性的组合)来区分元素,那么您有几个选项:
GroupBy
,它允许传入表达式IEqualityComparer<XElement>
的类,并将其传递给Distinct
DistinctBy
from MoreLinq,它还允许传入相等表达式https://stackoverflow.com/questions/30241432
复制相似问题