public T RetrieveOrAdd <T>(Func <T> missing) { if (_byType.Contains(typeof(T))) { return(Retrieve <T>()); } var value = missing(); _byType[typeof(T)] = value; return(value); }