C# 使用LINQ统计列表中给定对象的数量

C# 使用LINQ统计列表中给定对象的数量,c#,linq,list,C#,Linq,List,我有一个列表,可以包含同一对象的多个实例。现在我需要计算一下,给定对象包含在这个列表中的频率 int count = 0; foreach (IMyObject item in myList) if (item == object2Count) count++; 我相信,这可以做得更好与林克,但林克仍然是一个谜,我 我的第一个问题是:如何通过LINQ计算对象,第二个问题是:这个LINQ版本是慢还是快?我使用的是ObservableCollection,列表中的项目数量通常很小。。。

我有一个列表,可以包含同一对象的多个实例。现在我需要计算一下,给定对象包含在这个列表中的频率

int count = 0;
foreach (IMyObject item in myList)
  if (item == object2Count)
    count++;
我相信,这可以做得更好与林克,但林克仍然是一个谜,我

我的第一个问题是:如何通过LINQ计算对象,第二个问题是:这个LINQ版本是慢还是快?我使用的是ObservableCollection,列表中的项目数量通常很小。。。通常不超过20

提前感谢,

Frank

您可以使用扩展方法轻松计算集合中的对象。要么:

var count = myList.Where(item => item == object2Count).Count();

就性能而言,它应该与foreach循环相同

(您的谓词
item==object2Count
看起来有点奇怪,但这与如何计算集合中的对象无关。)

尝试以下方法:

var count = objectlist.Count(x => x == object2Count));


int count=myList.count(item=>item==object2Count)

-1-此查询不返回
object2Count
的实例数,但返回类
ObjectClass
的对象数这是错误的,他并不是在寻找某个类的所有对象,而是某个特定对象感谢您的回答。现在我看到了答案,这似乎是显而易见的:D.至于我的谓词,它有什么奇怪的地方,你会建议如何用另一种方式编写它?@Aaginor:如果
=
使用引用相等,并且在集合中不多次存储同一实例,那么
count
将是0或1。因此,基本上您是在确定
object2Count
是否属于该集合。使用
Any
扩展方法有更有效的方法来确定。另一方面,如果您重写了
==
操作符,那么您的谓词就可以了。我不会创建要存储的重复对象,而是多次存储相同的引用。(比如IMyObject o=new MyObject();myList.Add(o);myList.Add(o);)(或者至少我相信我确实存储了相同的对象:D)@Aaginor:如果你想计算一个特定引用在集合中存储了多少次,你的谓词是正确的。
var count = objectlist.Count(x => x == object2Count));
int count = myList.Count(x => x == object2Count);