Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何返回ObservableCollection中满足条件C的所有项#_C# - Fatal编程技术网

C# 如何返回ObservableCollection中满足条件C的所有项#

C# 如何返回ObservableCollection中满足条件C的所有项#,c#,C#,我试图找到一种简洁的方法来找到一个可观察的集合中所有符合特定标准的值。在这个例子中,为了保持简单,让我们假设它的集合包含int,我试图找到所有大于5的项 目前我所知道的最好的方法就是这样 ObservableCollection<Int> findAllGreaterThanFive (ObservableCollection<Int> numbers) { ObservableCollection<Int> numbersGreaterThanFiv

我试图找到一种简洁的方法来找到一个可观察的集合中所有符合特定标准的值。在这个例子中,为了保持简单,让我们假设它的集合包含int,我试图找到所有大于5的项

目前我所知道的最好的方法就是这样

ObservableCollection<Int> findAllGreaterThanFive (ObservableCollection<Int> numbers)
{
    ObservableCollection<Int> numbersGreaterThanFive;

    foreach(Int number in numbers)
    {
        if (number > 5)
        {
            numbersGreaterThanFive.add(number);    
        }
    }

    return numbersGreaterThanFive;
}
ObservableCollection FindAllCreate五(ObservableCollection编号)
{
大于五的可观察收集数;
foreach(整数中的整数)
{
如果(数量>5)
{
大于五的数字。添加(数字);
}
}
返回号码大于五;
}

显然,忽略任何简单的解决方案,这些解决方案利用了我正在寻找int的事实,我需要一个解决方案,它可以与任何类型的、任何条件的可观察集合一起工作。我只是想知道使用foreach循环和条件检查每个项目是否是最好的方法?

您可以这样说:

var numbersGreaterThanFive = numbers.Where(x => x > 5);

你可以这样说:

var numbersGreaterThanFive = numbers.Where(x => x > 5);

您可以使用System.Linq名称空间,添加using语句
using System.Linq
,然后可以使用以下
Where
方法

ObservableCollection<int> list = new ObservableCollection<int>();
list.Where(i => i > 5).ToList();
ObservableCollection<DataItem> list = new ObservableCollection<DataItem>();
    DataItem item = list.FirstOrDefault(i => i.ID == 10);
if(item != null)
{
 //DoWork
}
上面的代码返回ID为10的数据项。但是如果没有ID=10的记录,那么它将抛出一个异常。如果您不确定只有一条记录满足该条件,请避免这种情况。您还可以使用
FirstOrDefault()
方法

ObservableCollection<int> list = new ObservableCollection<int>();
list.Where(i => i > 5).ToList();
ObservableCollection<DataItem> list = new ObservableCollection<DataItem>();
    DataItem item = list.FirstOrDefault(i => i.ID == 10);
if(item != null)
{
 //DoWork
}
ObservableCollection列表=新的ObservableCollection();
DataItem=list.FirstOrDefault(i=>i.ID==10);
如果(项!=null)
{
//嫁妆
}

如果没有ID=10的记录,则项将为空。

您可以使用System.Linq名称空间,添加using语句
using System.Linq
,然后可以使用以下
Where
方法

ObservableCollection<int> list = new ObservableCollection<int>();
list.Where(i => i > 5).ToList();
ObservableCollection<DataItem> list = new ObservableCollection<DataItem>();
    DataItem item = list.FirstOrDefault(i => i.ID == 10);
if(item != null)
{
 //DoWork
}
上面的代码返回ID为10的数据项。但是如果没有ID=10的记录,那么它将抛出一个异常。如果您不确定只有一条记录满足该条件,请避免这种情况。您还可以使用
FirstOrDefault()
方法

ObservableCollection<int> list = new ObservableCollection<int>();
list.Where(i => i > 5).ToList();
ObservableCollection<DataItem> list = new ObservableCollection<DataItem>();
    DataItem item = list.FirstOrDefault(i => i.ID == 10);
if(item != null)
{
 //DoWork
}
ObservableCollection列表=新的ObservableCollection();
DataItem=list.FirstOrDefault(i=>i.ID==10);
如果(项!=null)
{
//嫁妆
}

如果没有ID=10的记录,则项将为空。

为什么要返回新集合?将筛选器作为方法的第二个参数发送。在这种情况下使用Func。我会说使用LINQ。在这种情况下,延迟执行是您的朋友。为什么要返回新集合?将筛选器作为方法的第二个参数发送。在这种情况下使用Func。我会说使用LINQ。在这种情况下,延迟执行是您的朋友。要进一步扩展,您可以使用IComparable而不是“>”,使用变量而不是“5”来满足问题的最后一部分。特别是,
返回新的ObservableCollection(numbers.Where(x=>x>5))
。您还可以使用
.ToList()
方法。e、 g.
var numbersGreaterthan=numbers.Where(x=>x>5.ToList()这对我不起作用,我正在尝试制作一个windows通用应用程序,顺便说一句,如果这改变了什么,并且我使用自定义类作为我的类型,我会得到错误System.Collections.ObjectModel.ObservableCollection不包含“Where”的定义如果LINQ不可能,我的答案确实不起作用(您应该将其添加到标记中)。我不明白为什么接受的答案可以正常工作(也使用Where)。要进一步扩展,您可以使用IComparable而不是“>”,使用变量而不是“5”来满足问题的最后一部分。特别是,
返回新的ObservableCollection(number.Where(x=>x>5))
。您也可以使用
.ToList()
方法。例如
var numbersgreeaterthan=numbers.Where(x=>x>5)。ToList()
这对我不起作用,我正在尝试制作一个windows通用应用程序,顺便说一句,如果这改变了什么,并且我使用自定义类作为我的类型,我得到的错误是System.Collections.ObjectModel.ObservableCollection不包含“Where”的定义。如果LINQ不可能,我的答案确实不起作用(你应该把它添加到标签上)。我不明白为什么接受的答案可以正常工作(也使用Where)。