I believe because IX is an interface. The compiler believes that perhaps a value of type IX can already be obtained from Wrapped<IX> (even if Wrapped<T> sealed), so it does not use a conversion.
Details are quite complex in sections 6.4.3 and 6.4.4 of the C # 3.0 specification. Mostly because IX is an interface, it does not "encompass" any types, which means that the later step in 6.4.4 fails.
I suggest you create a non-generic Wrapped type with this method:
public static Wrapped<T> Of<T>(T item) { return new Wrapped<T>(item); }
Then you can simply write:
using (Wrapped<IX> wrappedIX = Wrapped.Of(plainIX))
Mostly conversions can be a bit complicated for various reasons - simple methods are usually easier to understand, IMO.
source share