internal static void Deallocate <T>(T objectToDeallocate) where T : class { MyGenericObjectPool objectPool = null; CleanerDelegate cleanerDelegate = null; MyTuple <MyGenericObjectPool, CleanerDelegate> poolDelegatePair; if (m_poolsByType.TryGetValue(objectToDeallocate.GetType(), out poolDelegatePair)) { objectPool = poolDelegatePair.Item1; cleanerDelegate = poolDelegatePair.Item2; } else { Debug.Fail("No type registered for " + objectToDeallocate.GetType().ToString()); return; } cleanerDelegate(objectToDeallocate); objectPool.Deallocate(objectToDeallocate); }