Foreach循环获取IEnumerable <t>

时间:2015-07-30 07:49:27

标签: c# generics ienumerable

当使用foreach循环遍历值集合类型时,是否需要获取IEnumerable<T>接口而不是非通用IEnumerable接口,以防止不需要的中间行李说明unbox出现在你的编译代码中?

2 个答案:

答案 0 :(得分:5)

  

是否必要

当然不是必要的(在此上下文中必需的意思是必需的)。

这是个好主意:是的。在大多数情况下保存拆箱将是微优化(CPU限制数据处理的内部循环除外)。但是如果你知道你有一些类型的值类型的集合,那么保留这些信息不会浪费时间在盒子 - 盒子上,并使代码更容易使用。

鉴于IDE的智能感知功能,最后一点是最有价值的。

答案 1 :(得分:2)

现在没有理由自己实施非通用IEnumerable。在某些情况下,您将被迫使用它,例如在依赖旧的IEnumerable<T>实现的集合中,您无法控制。

主要是为了向后兼容到泛型来到框架之前的日期(.NET 1.0)。如果要实现迭代器,请始终使用$_GET['variable']