public static T Fetch <T, K1>(K1 k1) where T : BaseComponent { var type = typeof(T); BaseComponent result; if (IsSingleType(type)) { if (!SingleCaseComponents.TryGetValue(type, out result)) { result = ComponentFactory.CreateComponent(type, k1); SetId(result); SingleCaseComponents[type] = result; } } else { if (!TypeComponents.TryGetValue(type, out ConcurrentQueue <BaseComponent> queue)) { queue = new ConcurrentQueue <BaseComponent>(); TypeComponents[type] = queue; } if (!queue.TryDequeue(out result)) { result = ComponentFactory.CreateComponent(type, k1); } SetId(result); IdComponents[result.Id] = result; } return((T)result); }
public static BaseComponent Fetch(Type type) { BaseComponent result; if (IsSingleType(type)) { if (!SingleCaseComponents.TryGetValue(type, out result)) { result = ComponentFactory.CreateComponent(type); SetId(result); SingleCaseComponents[type] = result; } } else { if (!TypeComponents.TryGetValue(type, out ConcurrentQueue <BaseComponent> queue)) { queue = new ConcurrentQueue <BaseComponent>(); TypeComponents[type] = queue; } if (!queue.TryDequeue(out result)) { result = ComponentFactory.CreateComponent(type); } SetId(result); IdComponents[result.Id] = result; } return(result); }