Foreach 循环得到一个 IEnumerable<T>

Foreach loop to get an IEnumerable<T>

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

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

它主要是为了向后兼容泛型出现在框架 (.NET 1.0) 之前的日期。当你想实现一个迭代器时,总是使用IEnumerable<T>

is it necessary

当然不是必要的(必要的在这种情况下意味着需要)。

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

考虑到 IDE 的类似智能感知的能力,最后一点是迄今为止最有价值的。