static public IEnumerable <T> UseEnumerate <T>(this ListPool <T> item, Process <List <T> > process) { using (Pooled <List <T> > pooled = item.Withdraw()) { List <T> list = pooled.Get(); process(list); foreach (T sub_item in list) { yield return(sub_item); } } }
static private IEnumerable <T> UseEnumerate <T>(this ArrayPool <T> item, ArrayInitializer <T> initializer, ArrayFinalizer <T> finalizer) { using (Pooled <T[]> pooled = item.Withdraw()) { T[] array = pooled.Get(); int length = initializer(ref array); try { for (int i = 0; i < length; i++) { yield return(array[i]); } } finally { finalizer(ref array, length); pooled.Set(array); } } }
public J Use <J>(Operation <J, T> operation) { using (Pooled <T> pooled = Withdraw()) return(operation(pooled.Get())); }
public void Use(Process <T> process) { using (Pooled <T> pooled = Withdraw()) process(pooled.Get()); }