public IEnumerator <TMessage> GetEnumerator()
        {
            using (Stream stream = streamProvider())
            {
                CodedInputStream input = CodedInputStream.CreateInstance(stream);
                input.SetSizeLimit(sizeLimit);
                uint   tag;
                string name;
                while (input.ReadTag(out tag, out name))
                {
                    if ((tag == 0 && name == "item") || (tag == ExpectedTag))
                    {
                        IBuilder builder = defaultMessageInstance.WeakCreateBuilderForType();
                        input.ReadMessage(builder, extensionRegistry);
                        yield return((TMessage)builder.WeakBuild());
                    }
                    else
                    {
                        throw InvalidProtocolBufferException.InvalidMessageStreamTag();
                    }

                    input.ResetSizeCounter();
                }
            }
        }
 public IEnumerator <TMessage> GetEnumerator()
 {
     using (Stream stream = streamProvider()) {
         CodedInputStream input = CodedInputStream.CreateInstance(stream);
         uint             tag;
         while ((tag = input.ReadTag()) != 0)
         {
             if (tag != ExpectedTag)
             {
                 throw InvalidProtocolBufferException.InvalidMessageStreamTag();
             }
             yield return(messageReader(input, extensionRegistry));
         }
     }
 }