namespace Test { /*胖接口示例*/ public class Program { static void Main(string[] args) { int[] nums1 = { 1, 2,3, 4, 5 }; ArrayList nums2 = new ArrayList { 1, 2, 3, 4, 5 }; var nums3 = new ReadOnlyCollection(nums1); Console.WriteLine(Sum(nums1)); Console.WriteLine(Sum(nums2)); Console.WriteLine(Sum(nums3)); Console.Read(); } //这个接口太胖了,需求比较多,实际我们需要的只是foreach迭代功能,所以IEnumerable足够 //static int Sum(ICollection nums) static int Sum(IEnumerable nums) { int sum = 0; foreach(var n in nums) sum += (int)n; return sum; } } public class ReadOnlyCollection : IEnumerable { private int[] _array; public ReadOnlyCollection(int[] array) { this._array = array; } public IEnumerator GetEnumerator() { return new Enumerator(this); } public class Enumerator : IEnumerator { private ReadOnlyCollection _collection; private int _head; public Enumerator(ReadOnlyCollection collection) { this._collection = collection; _head = -1; } public object Current { get { object o = _collection._array[_head]; return o; } } public bool MoveNext() { if(++_head < _collection._array.Length) { return true; } else { return false; } } public void Reset() { _head = -1; } } } }
原文:https://www.cnblogs.com/hansel520/p/12141649.html