internal static object Allocate(Type typeToAllocate) { MyGenericObjectPool objectPool = null; CleanerDelegate cleanerDelegate = null; MyTuple <MyGenericObjectPool, CleanerDelegate> poolDelegatePair; if (m_poolsByType.TryGetValue(typeToAllocate, out poolDelegatePair)) { objectPool = poolDelegatePair.Item1; cleanerDelegate = poolDelegatePair.Item2; } else { Debug.Fail("No type registered for " + typeToAllocate.ToString()); return(null); } object allocatedObject = null; if (objectPool.AllocateOrCreate(out allocatedObject)) { cleanerDelegate(allocatedObject); } return(allocatedObject); }