Is it possible in C# to overload a generic cast operator in the following way?
Conversion operators can't be generic. From the spec section 10.10, here's the format of a conversion-operator-declarator:
conversion-operator-declarator: implicit operator type ( type identifier ) explicit operator type ( type identifier )
Compare this with, say, a method-header:
method-header: attributesopt method-modifiersopt partialopt return-type member-name type-parameter-listopt ( formal-parameter-listopt ) type-parameter-constraints-clausesopt
(Sorry about the formatting - not sure how to do it better.)
Note that the operator format doesn't include a type parameter list or type parameter constraints.
Your code boils down to the line: return new Foo<U>((U)a.Item)
Where you try to assign a baseclass to an inherited class, which is impossible.
Let's say T (base-class) is of type Stream
and U is of type MemoryStream
(inherited class), you cannot assign a Stream
to a variable of type MemoryStream
.