加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 枚举集合的不同方法

发布时间:2020-12-16 01:40:00 所属栏目:百科 来源:网络整理
导读:从以下两种方式来枚举一个集合,如果一个优先于另一个OR,则在性能方面都是相同的(即,因为ToList()转换涉及第二种方法) foreach(SomeType st in Collection){ //Do something}Collection.OfTypeSomeType.ToList().ForEach() 有没有其他方法(除了使用relection)
从以下两种方式来枚举一个集合,如果一个优先于另一个OR,则在性能方面都是相同的(即,因为ToList()转换涉及第二种方法)

foreach(SomeType st in Collection)
{
   //Do something
}


Collection.OfType<SomeType>.ToList().ForEach()

有没有其他方法(除了使用relection)?

编辑

这个场景怎么样?

class SomeType : IMyType
{
}

class OtherType : IMyType
{
}

class SomeCollection<T> : IList<T>,ICollection<T>,IEnumerable<T>,IList,ICollection,IEnumerable
{
}

考虑MyTypes是类SomeCollection< IMyType>的类中的属性.以下2接近相同?

foreach(IMyType mt in MyTypes) 
{   
  if(IMyType is SomeType)
  return; 
}

要么

if(MyTypes.OfType<SomeType>.Any())
    return;

解决方法

在你提到的那些中,第一个是首选.第二个会做更多的事情,包括转换到一个列表并检查类型,最后无论如何都要做一个foreach.

当然还有其他迭代方法,但它们依赖于集合.对于IList实现和数组,您可以使用普通for循环并使用myitem [i]索引项目.

但是没有理由不使用foreach,因为它适用于所有系列,并且AFAIK在性能方面始终是最佳选择.通过最优,我的意思是在算法复杂度/ big-o方面

编辑以回应您的问题编辑通常,您应该使用提供最佳可读性的枚举方案(不会严重影响性能).在您的示例中,您想要查看列表是否包含特定类型的任何元素,那么我将使用LINQ路由(collection.OfType …).它清楚地表达了意图,并且几乎可以用英语阅读文本并获得含义:“在我的收藏中,获取X类型的元素并告诉我它是否存在.”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读