如何检查具有特定属性的对象的List集合?

时间:2011-01-31 11:03:02

标签: c# generics search collections

我有List<IAgStkObject>。每个IAgStkObject都有一个名为InstanceName的属性。如何搜索我的列表以查找是否有任何包含的IAgStkObject具有特定的InstanceName?在过去,我会使用foreach循环......但这似乎太慢了。

WulfgarPro

3 个答案:

答案 0 :(得分:4)

如果你唯一拥有的是List(不是由InstanceName命令),那么就没有更快的方法了(如果经常进行类似的测试,你可以预处理数据并创建例如由InstanceName索引的Dictionary)。

与“过去”不同的唯一方法是那些有用的扩展方法,允许你只写

return myList.Any(item => item.InstanceName == "Searched name");

答案 1 :(得分:2)

如果列表按InstanceName排序,则可以使用二进制搜索算法,否则:否。

您必须使用一些更高级的数据结构(如排序列表或字典)。我认为字典可以解决这个问题。它非常快速且易于使用。

但是想想:你有多少物品?您是否确定循环通过它们是性能问题?如果你有&lt; 1000个对象,你绝对不必担心(除非你想要实时做某事)。

答案 2 :(得分:2)

您可以使用Linq

list.Any(o => o.InstanceName == "something")

但是你无法避免在列表中循环(在Linq案例中它是隐式完成的)。如果您希望获得性能提升,请更改数据结构。也许字典(InstanceName - &gt; IAgStkObject)是合适的吗?