Cast from Generics<T> to Specific SubClass

c#, generics

Solution

Amazing, I got it working by writing the code as such:

return (new SubClass(vd as TwoType) as MyClass<T>);

or

return (MyClass<T>)(object)new SubClass((TwoType)(object)vd );

But,

return (MyClass<T>)new SubClass((TwoType)vd );

doesn't work.

There seems to be a difference in `as` and `()` casting.

Problem

I have a class as such ``` public class MyClass<T> where T : OneType { T MyObj { get; set; } public MyCLass(T obj) { } } public class SubClass: MyClass<TwoType> { } // snip for other similar class definition ``` where, `TwoType` is derived from `OneType`. Now, I have this utility method ``` public static MyClass<T> Factory<T>(T vd) where T : OneType { switch(vd.TypeName) { case Constant.TwoType return new SubClass((TwoType)vd); // snip for other type check } } ``` Which function is, obviously, checks the type of `vd`, and the creates an appropriate `MyClass` type. The only problem is the above code won't compile, and I don't know why The error is Cannot cast expression of T to TwoType

Original source