Small cleanup in TraitDictionary.

This commit is contained in:
RoosterDragon
2015-11-28 21:42:51 +00:00
parent c0286bb147
commit aaa82339d1

View File

@@ -36,19 +36,14 @@ namespace OpenRA
class TraitDictionary class TraitDictionary
{ {
// construct this delegate once. static readonly Func<Type, ITraitContainer> CreateTraitContainer = t =>
static Func<Type, ITraitContainer> doCreateTraitContainer = CreateTraitContainer; (ITraitContainer)typeof(TraitContainer<>).MakeGenericType(t).GetConstructor(Type.EmptyTypes).Invoke(null);
static ITraitContainer CreateTraitContainer(Type t)
{
return (ITraitContainer)typeof(TraitContainer<>).MakeGenericType(t)
.GetConstructor(Type.EmptyTypes).Invoke(null);
}
Dictionary<Type, ITraitContainer> traits = new Dictionary<Type, ITraitContainer>(); readonly Dictionary<Type, ITraitContainer> traits = new Dictionary<Type, ITraitContainer>();
ITraitContainer InnerGet(Type t) ITraitContainer InnerGet(Type t)
{ {
return traits.GetOrAdd(t, doCreateTraitContainer); return traits.GetOrAdd(t, CreateTraitContainer);
} }
TraitContainer<T> InnerGet<T>() TraitContainer<T> InnerGet<T>()