当使用foreach
循环遍历值集合类型时,是否需要获取IEnumerable<T>
接口而不是非通用IEnumerable
接口,以防止不需要的中间行李说明unbox出现在你的编译代码中?
答案 0 :(得分:5)
是否必要
当然不是必要的(在此上下文中必需的意思是必需的)。
这是个好主意:是的。在大多数情况下保存拆箱将是微优化(CPU限制数据处理的内部循环除外)。但是如果你知道你有一些类型的值类型的集合,那么保留这些信息不会浪费时间在盒子 - 盒子上,并使代码更容易使用。
鉴于IDE的智能感知功能,最后一点是最有价值的。
答案 1 :(得分:2)
现在没有理由自己实施非通用IEnumerable
。在某些情况下,您将被迫使用它,例如在依赖旧的IEnumerable<T>
实现的集合中,您无法控制。
主要是为了向后兼容到泛型来到框架之前的日期(.NET 1.0)。如果要实现迭代器,请始终使用$_GET['variable']
。