public World AsReadOnly() { var entities = new List <Entity>(); var idsToIndexes = new Dictionary <int, int>(); foreach (var id in Entities.Keys) { entities.Add(Entities[id]); idsToIndexes.Add(id, entities.Count - 1); } return(new World(Width, Height, Timestamp, IDCounter, entities.ToImmutableList(), new ReadOnlyDictionary <int, int>(idsToIndexes), DictUtils.FromEnumerable(Teams.Select((kvp) => new KeyValuePair <int, Team>(kvp.Key, kvp.Value.AsReadOnly()))))); }