我有ObservableCollection<DateTime> myItems
它有一些需要删除的重复项目
我尝试使用:
myItems = myItems.Distinct();
但是我无法构建它并收到此错误:
错误1无法隐式转换类型 &#39; System.Collections.Generic.IEnumerable&#39;至 &#39; System.Collections.ObjectModel.ObservableCollection&#39 ;. 存在显式转换(您是否错过了演员?)
当我检查ObservableCollection时,我发现它是IEnumerable<T>
,如以下Go to Definition显示:
public class ObservableCollection<T> : Collection<T>, INotifyCollectionChanged, INotifyPropertyChanged
public class Collection<T> : IList<T>, ICollection<T>, IReadOnlyList<T>, IReadOnlyCollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable
所以我试着施展如下:
myItems = (ObservableCollection<DateTime>) myItems.Distinct();
它没有错误地构建好;但在运行时它会抛出以下错误:
类型&#39; System.InvalidCastException&#39;的例外情况发生在 mscorlib.ni.dll但未在用户代码中处理 信息:无法转换类型的对象 &#39; {d__81 {1}} 1的System.DateTime]&#39;
我也尝试了以下内容:
1[System.DateTime]' to type
'System.Collections.ObjectModel.ObservableCollection
但后来我发现了以下编译时错误:
错误1无法转换类型 &#39; System.Collections.Generic.List&#39;至 &#39; System.Collections.ObjectModel.ObservableCollection&#39;
我在这里缺少什么? 以及如何从ObservableCollection中删除重复的项目?
答案 0 :(得分:5)
怎么样
myItems = new ObservableCollection<DateTime>(myItems.Distinct());
答案 1 :(得分:3)
您错过了Distinct
返回IEnumerable<T>
的事实,ObservableCollection
不是ToList
。 List<T>
还会返回ObservableCollection
,而ObservableCollection
也不是ObservableCollection
。
这些类型无法转换为ObservableCollection<T>
,因此您无法直接转换它们。您需要创建一个新的public static ObservableCollection<T> ToObservableCollection<T>(
this IEnumerable<T> source)
{
var collection = new ObservableCollection<T>();
foreach(var item in source)
collection.Add(item);
return collection;
}
并使用新项填充它。
你可以使用{{1}}的{{3}}来做到这一点,或者你也可以实现自己的方法(如果你想使用流利的linq语法):
{{1}}