数组是迭代无序项集的一种快速方法,而且它们通常是只读的。虽然使用 `readonly' 关键字公开数组是无用的,因为数组的内容仍然可以更改,但 ReadOnlyCollection<T> 包装器解决了这个问题。问题是它比我所做的测试中的普通数组慢 4 倍。(我知道,返回数组的副本只会对性能造成一次影响,但理想情况下我也不想在这上面浪费 CPU 时间。)
我注意到我可以获得只读完整性检查的好处,同时保留具有如下类的普通数组的性能:
class ReadOnlyArray<T>
{
private readonly T[] array;
public ReadOnlyArray(T[] a_array)
{
array = a_array;
}
// read-only because no `set'
public T this[int i]
{ get { return array[i]; } }
public int Length
{ get { return array.Length; } }
}
问题是我失去了 foreach() 语法的便利性。即,为了保持性能,我必须使用 for(;;) 循环遍历它。-- 我曾经写过 C 代码,其中每个循环都是一个 for(;;)。也许我已经被宠坏了。-- 如果我实现 IEnumerable<T>,那么我得到的性能与 ReadOnlyCollection<T> 相同,而这个类是没用的。
知道如何实现所有 3 个目标的完美结合:只读的完整性检查、没有性能损失和方便的 foreach() 语法?