public void Parse(Stream hs) { while (true) { PropertyID propertyID = GetPropertyID(this, hs); switch (propertyID) { case PropertyID.kPackInfo: PackInfo = new PackInfo(); PackInfo.Parse(hs); break; case PropertyID.kUnPackInfo: UnPackInfo = new UnPackInfo(); UnPackInfo.Parse(hs); break; case PropertyID.kSubStreamsInfo: if (UnPackInfo == null) { Trace.TraceWarning("SubStreamsInfo block found, yet no UnPackInfo block has been parsed so far."); UnPackInfo = new UnPackInfo(); } SubStreamsInfo = new SubStreamsInfo(UnPackInfo); SubStreamsInfo.Parse(hs); break; case PropertyID.kEnd: return; default: throw new NotImplementedException(propertyID.ToString()); } } }