Я считаю, что это потому, что IX
- это интерфейс. Компилятор считает, что, возможно, значение типа IX
уже может быть получено из Wrapped<IX>
(даже если Wrapped<T>
запечатан), поэтому он не использует преобразование.
Детали довольно сложные, в разделах 6.4.3 и 6.4.4 спецификации C # 3.0. В основном потому, что IX
является интерфейсом, он не «охватывается» любыми типами, что означает, что последующий шаг в 6.4.4 завершится неудачей.
Я предлагаю вам создать неуниверсальный тип Wrapped
с помощью этого метода:
public static Wrapped<T> Of<T>(T item)
{
return new Wrapped<T>(item);
}
Тогда вы можете просто написать:
using (Wrapped<IX> wrappedIX = Wrapped.Of(plainIX))
По сути, преобразования могут быть немного сложными по разным причинам - простые методы, как правило, легче понять, ИМО.