C# 从ObservableCollection中删除副本<;T>;
我有一个可观察的myItems集合 它有一些重复的项目需要删除 我尝试使用:C# 从ObservableCollection中删除副本<;T>;,c#,linq,observablecollection,C#,Linq,Observablecollection,我有一个可观察的myItems集合 它有一些重复的项目需要删除 我尝试使用: myItems = myItems.Distinct(); 但是,我无法构建它并收到此错误: 错误1无法隐式转换类型 “System.Collections.Generic.IEnumerable”到 “System.Collections.ObjectModel.ObservableCollection”。 存在显式转换(是否缺少强制转换?) 当我检查ObservableCollection时,我发现它是IEnum
myItems = myItems.Distinct();
但是,我无法构建它并收到此错误:
错误1无法隐式转换类型
“System.Collections.Generic.IEnumerable”到
“System.Collections.ObjectModel.ObservableCollection”。
存在显式转换(是否缺少强制转换?)
当我检查ObservableCollection时,我发现它是IEnumerable
,如下所示:
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
但随后我发现了以下编译时错误:
错误1无法转换类型
“System.Collections.Generic.List”到
'System.Collections.ObjectModel.ObservableCollection'
我错过了什么?
如何从ObservableCollection中删除重复项?如何
myItems = new ObservableCollection<DateTime>(myItems.Distinct());
myItems=新的ObservableCollection(myItems.Distinct());
怎么样
myItems = new ObservableCollection<DateTime>(myItems.Distinct());
myItems=新的ObservableCollection(myItems.Distinct());
您忽略了一个事实,Distinct
返回一个IEnumerable
,它不是可观察的集合。和ToList
返回一个列表
,该列表也不是可观察集合
这些类型不能转换为ObservableCollection
,因此不能直接强制转换它们。您需要创建一个新的ObservableCollection
,并用新项目填充它
您可以使用ofObservableCollection
来实现这一点,或者您也可以实现自己的方法(如果您喜欢使用linq的流畅语法):
公共静态ObservableCollection到ObservableCollection(
这是(不可数的来源)
{
var collection=新的ObservableCollection();
foreach(源中的var项)
集合。添加(项目);
回收;
}
您忽略了一个事实,Distinct
返回一个IEnumerable
,它不是可观察的集合。和ToList
返回一个列表
,该列表也不是可观察集合
这些类型不能转换为ObservableCollection
,因此不能直接强制转换它们。您需要创建一个新的ObservableCollection
,并用新项目填充它
您可以使用ofObservableCollection
来实现这一点,或者您也可以实现自己的方法(如果您喜欢使用linq的流畅语法):
公共静态ObservableCollection到ObservableCollection(
这是(不可数的来源)
{
var collection=新的ObservableCollection();
foreach(源中的var项)
集合。添加(项目);
回收;
}
使用IEnumerable
构造函数投影一个新的可观察集合:使用IEnumerable
构造函数投影一个新的可观察集合:您的解释很好。。但我被错误信息愚弄了,它是误导性的[存在显式转换(你是否缺少演员阵容?)。。所以我所有的搜索都是关于[missing cast]:(@stackunderflow,如果类型之间没有定义隐式转换,编译器会建议您显式转换它,如果这也不可能,它会在运行时抛出InvalidCastException
,就像您的示例:)您的解释很好。。但我被错误信息愚弄了,它是误导性的[存在显式转换(你是否缺少演员阵容?)。。所以我所有的搜索都是关于[missing cast]:(@stackunderflow,如果在类型之间没有定义隐式转换,编译器会建议您显式转换它,如果这也不可能,它会在运行时抛出InvalidCastException
,就像您的示例:)
myItems = new ObservableCollection<DateTime>(myItems.Distinct());
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;
}