digitalmars.D - Re: To interface or not to interface
- Kagamin <spam here.lot> May 27 2010
- Kagamin <spam here.lot> May 27 2010
Steven Schveighoffer Wrote:On Tue, 25 May 2010 02:26:02 -0400, Kagamin <spam here.lot> wrote:Recently I've hit a problem with collections in C#. Given classes class A {} class B {} And two collections Collection<A> and Collection<B> it's possible to concat them into an array A[]. The efficient way to do it is to use CopyTo(T[],int) method, but it accepts only array of exact collection item's type, so I had to change the Collection<B> type to Collection<A>.
Did you mean class B : A {} ?
Ah, yes.According to this page, it says that an exception could be thrown if "Type T cannot be cast automatically to the type of the destination array." This implies that a destination array type to which T could automatically be cast should work.
ICollection<A> acoll; ICollection<B> bcoll; A[] cat; ICollection<A>.CopyTo(A[],int) ICollection<B>.CopyTo(B[],int) - note the signature, the destination array can't be an array of supertype. There's no chance to throw an exception because the code doesn't pass type check at compile time.
May 27 2010
ICollection<A> acoll; ICollection<B> bcoll; A[] cat; ICollection<A>.CopyTo(A[],int) ICollection<B>.CopyTo(B[],int) - note the signature, the destination array can't be an array of supertype. There's no chance to throw an exception because the code doesn't pass type check at compile time.
To ease understanding: ICollection<Animal> acoll; ICollection<Cat> ccoll; Animal[] animals; ICollection<Animal>.CopyTo(Animal[],int) ICollection<Cat>.CopyTo(Cat[],int)
May 27 2010