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.