ArrayList C#包含方法查询
我有一个ArrayList C#包含方法查询,c#,observablecollection,C#,Observablecollection,我有一个可观察的收集列表。它包含10个类型为MyClass的对象 class MyClass { string name; int age; } 如果我想查找列表中age=10的所有项目,我可以使用Contains方法吗? 如果是,我如何在不使用迭代的情况下做到这一点 var age10 = list.Where(i => i.age == 10); 这里还有很多查询:否,包含的内容只查找特定的值,而不是匹配谓词的内容。它也只找到一个值,而不是每个匹配的值 但是,如果您使用的是
可观察的收集
列表。它包含10个类型为MyClass
的对象
class MyClass
{
string name;
int age;
}
如果我想查找列表中age=10
的所有项目,我可以使用Contains
方法吗?
如果是,我如何在不使用迭代的情况下做到这一点
var age10 = list.Where(i => i.age == 10);
这里还有很多查询:否,
包含的内容
只查找特定的值,而不是匹配谓词的内容。它也只找到一个值,而不是每个匹配的值
但是,如果您使用的是.NET 3.5或更高版本,则可以使用从LINQ到对象:
foreach (var item in list.Where(x => x.Age == 10))
{
// Do something with item
}
由于
observateCollection
实现了Collection
,它实现了IEnumerable
。因此,您可以使用LINQ到对象扩展方法来简化此过程(即使它将在后台使用迭代):
可以使用linq执行此操作,但不能使用
Contains
var foo = from bar in myCollection where bar.age == 10 select bar;
正如其他人所说,使用
。其中(i=>i.Age==10)
将是获得问题中所述结果的正确方法。您可以使用.Contains()
检查您的集合中是否有类的特定实例。您的问题涉及ObservableCollection,但您的标题涉及ArrayList。请编辑以保持一致。请注意,虽然这是一个很好的解决方案,但在幕后它使用迭代。这对于10个对象来说是没有问题的,但是如果在较大的集合上过度使用,那么速度可能会很慢,所以要注意这一点。实际上,在迭代的时间开销比处理循环中每个值的时间开销更大的情况下,迭代器速度会很慢,并且集合很大(多达数百个)。如果是这样的话,您可能需要重新考虑开始时对数据结构的选择:一个已排序的本机数组、一棵树或一个列表字典会更好,因为它们分别是O(logn)、O(logn)和O(1)用于搜索,而不是使用未排序的ObservaleCollection得到的O(N)。
var foo = from bar in myCollection where bar.age == 10 select bar;