public MapData Clone()
 {
     return(new MapData(
                nameSpace: NameSpace,
                lineDefs: LineDefs.Select(item => item.Clone()),
                sideDefs: SideDefs.Select(item => item.Clone()),
                vertices: Vertices.Select(item => item.Clone()),
                sectors: Sectors.Select(item => item.Clone()),
                things: Things.Select(item => item.Clone()),
                comment: Comment,
                unknownProperties: UnknownProperties.Select(item => item.Clone()),
                unknownBlocks: UnknownBlocks.Select(item => item.Clone())));
 }
 public MapData(
     string nameSpace,
     IEnumerable <LineDef> lineDefs,
     IEnumerable <SideDef> sideDefs,
     IEnumerable <Vertex> vertices,
     IEnumerable <Sector> sectors,
     IEnumerable <Thing> things,
     string comment = "",
     IEnumerable <UnknownProperty> unknownProperties = null,
     IEnumerable <UnknownBlock> unknownBlocks        = null)
 {
     NameSpace = nameSpace;
     LineDefs.AddRange(lineDefs);
     SideDefs.AddRange(sideDefs);
     Vertices.AddRange(vertices);
     Sectors.AddRange(sectors);
     Things.AddRange(things);
     Comment = comment;
     UnknownProperties.AddRange(unknownProperties ?? Enumerable.Empty <UnknownProperty>());
     UnknownBlocks.AddRange(unknownBlocks ?? Enumerable.Empty <UnknownBlock>());
     AdditionalSemanticChecks();
 }