Вам нужно сделать:
public class EnumerableDisposer<T, J> : IDisposable
where T : IEnumerable<J> where J : IDisposable
{
// Implement...
К сожалению, для того, чтобы обернуть любой внутренний тип (IEnumerable<J>
, в вашем коде), вашему классу "обёртывания" должен быть определён тип J
в общем определении.Кроме того, чтобы добавить ограничение IEnumerable<J>
, вам нужно иметь другой тип T
.
При этом, если вы хотите избежать спецификации двойного универсального типа, вы всегда можете переделать этоследующим образом:
public class EnumerableDisposer<T> : IDisposable
where T : IDisposable
{
public EnumerableDisposer(IEnumerable<T> enumerable)
{
// ...
Это вынуждает вас создавать его с IEnumerable<T>
, где T - IDisposable, с единственным универсальным типом.Поскольку вы эффективно добавляете ограничение IEnumerable<T>
через конструктор, это будет работать так же, как и предыдущий параметр.Единственным недостатком является то, что вам нужно сделать общий во время строительства, но, учитывая имя, я подозреваю, что это будет хорошо ...