public Copyable GetCopy(Copyable obj) { for (int i = objectPool.Count - 1; i >= 0; --i) { Copyable o = objectPool[i]; if (o.CopyFrom(obj)) { objectPool.RemoveAt(i); return(o); } } return(obj.Copy()); }