quello che devi fare:
public class EnumerableDisposer<T, J> : IDisposable
where T : IEnumerable<J> where J : IDisposable
{
// Implement...
Purtroppo, al fine di avvolgere qualsiasi tipo interno (IEnumerable<J>
, nel codice), la classe "wrapping" ha bisogno di avere il tipo di J
definito nella definizione generica. Inoltre, per aggiungere il vincolo IEnumerable<J>
, è necessario l'altro tipo T
.
Detto questo, se si vuole evitare la doppia specifica del tipo generico, si può sempre rielaborare questo come segue:
public class EnumerableDisposer<T> : IDisposable
where T : IDisposable
{
public EnumerableDisposer(IEnumerable<T> enumerable)
{
// ...
Questo ti costringe a costruirlo con una IEnumerable<T>
dove T è IDisposable, con un singolo tipo generico. Poiché si sta effettivamente aggiungendo il vincolo IEnumerable<T>
tramite il costruttore, questo funzionerà come l'opzione precedente. L'unico inconveniente è che è necessario avere il generico fatto in fase di costruzione, ma dato il nome, ho il sospetto che andrà bene ...
fonte
2010-07-12 17:15:34
Questi sembrano fare il trucco. Ringrazia tutti. – scott