You can also use this to do casting with conversions if needed: public static IEnumerable CastAll(this IEnumerable items) { var p = Expression. Parameter(typeof(TItem), "i"); var c = Expression. Convert(p, typeof(TDest)); var ex = Expression.
Lambda(c, p).Compile(); foreach (var item in items) { yield return ex(item); } } From http://adventuresdotnet.blogspot.com/2010/06/better-more-type-safe-alternative-to.html.
Let's name your classes Animal for A, Barker for B, and Dog for D. Actually C is wider than Dog : C. Dog is parametrized with Barker.
Have you seen barking elephants? You need to declare some covariant interface to allow assignment of class instantiated with more derived type argument C to object instantiated with less derived type argument C. You can use empty interface, like @NickW suggested, but you will not be able to do something with instance of that interface (it's empty!).
I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.