如何返回ObservableCollection中满足C#条件的所有项
本文关键字:条件 满足 何返回 返回 ObservableCollection | 更新日期: 2023-09-27 18:21:08
我正试图找到一种巧妙的方法来查找符合特定标准的可观察集合中的所有值。对于这个例子,为了简单起见,假设它的集合包含int,我正在尝试查找所有大于5的项。
我目前所知道的最好的方法是这样做
ObservableCollection<Int> findAllGreaterThanFive (ObservableCollection<Int> numbers)
{
ObservableCollection<Int> numbersGreaterThanFive;
foreach(Int number in numbers)
{
if (number > 5)
{
numbersGreaterThanFive.add(number);
}
}
return numbersGreaterThanFive;
}
显然,忽略任何利用我正在寻找int这一事实的简单解决方案。我需要一个可以与任何类型的任何条件的ObservableCollection一起使用的解决方案。我只是想知道用foreach循环和条件检查每个项目是否是最好的方法?
你可以说这样的话:
var numbersGreaterThanFive = numbers.Where(x => x > 5);
您可以使用System.Linq命名空间,使用语句using System.Linq
添加,然后可以使用以下Where
方法。
ObservableCollection<int> list = new ObservableCollection<int>();
list.Where(i => i > 5).ToList();
你可以使用任何类型的对象,比如:
ObservableCollection<DataItem> list = new ObservableCollection<DataItem>();
list.Where(i => i.ID > 10);
上面的代码返回ID大于10的DataItem。
如果你确定只有一条记录满足条件,你可以使用First()
方法,比如:
ObservableCollection<DataItem> list = new ObservableCollection<DataItem>();
list.First(i => i.ID == 10);
上面的代码返回ID为10的DataItem。但是,如果没有ID为10的记录,那么它将抛出一个异常。如果您不确定只有一个记录满足条件,请避免这种情况。也可以使用FirstOrDefault()
方法。
ObservableCollection<DataItem> list = new ObservableCollection<DataItem>();
DataItem item = list.FirstOrDefault(i => i.ID == 10);
if(item != null)
{
//DoWork
}
若并没有ID为10的记录,那个么项目将为空。