c# – 如何实现ICollection.CopyTo方法?
我正在写一个实现ICollection< T>和ICollection界面.
MSDN说这些有点不同. 这是我的通用方法的实现(我相信它是完全功能的): void ICollection<PlcParameter>.CopyTo(PlcParameter[] array,int arrayIndex) { if (array == null) throw new ArgumentNullException("array"); if (arrayIndex < 0) throw new ArgumentOutOfRangeException("arrayIndex"); if (array.Length - arrayIndex < Count) throw new ArgumentException("Not enough elements after arrayIndex in the destination array."); for (int i = 0; i < Count; ++i) array[i + arrayIndex] = this[i]; } 然而,非泛型版本的方法让我有点困惑.首先,我如何检查以下异常情况?
第二,有没有办法利用现有的通用实现来减少代码重复? 这是我正在进行的实施: void ICollection.CopyTo(Array array,int index) { if (array == null) throw new ArgumentNullException("array"); if (index < 0) throw new ArgumentOutOfRangeException("arrayIndex"); if (array.Rank > 1) throw new ArgumentException("array is multidimensional."); if (array.Length - index < Count) throw new ArgumentException("Not enough elements after index in the destination array."); for (int i = 0; i < Count; ++i) array.SetValue(this[i],i + index); } 解决方法
您已经完成了大部分实现ICollection< T> .CopyTo的工作.
ICollection.CopyTo有四种可能性: >它将与ICollection< T>相同. 我们可以通过调用ICollection< T> .CopyTo来处理前两个. 在每个这些情况下,数组中的PlcParameter []将给我们引用一个强类型的数组. 在后一种情况下,不会. 我们确实想要分别捕获array == null: void ICollection.CopyTo(Array array,int index) { if (array == null) throw new ArgumentNullException("array"); PlcParameter[] ppArray = array as PlcParameter[]; if (ppArray == null) throw new ArgumentException(); ((ICollection<PlcParameter>)this).CopyTo(ppArray,index); } 如果您真的想要在ppArray为null的情况下测试array.Rank == 1,并相应地更改错误消息. (BTW,为什么要显式地实现ICollection< PlcParameter> .CopyTo?很明显,有助于明确地执行工作,所以人们不必投入所有.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |