To interface or not to interface

Kagamin spam at here.lot
Thu May 27 00:03:00 PDT 2010


Steven Schveighoffer Wrote:

> On Tue, 25 May 2010 02:26:02 -0400, Kagamin <spam at 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.


More information about the Digitalmars-d mailing list