void WriteElement(object obj, int fieldNumber, bool pack, ProtoWriter dest, bool isFirst)
        {
            if (_protoCompatibility)
            {
                if (!pack)
                {
                    ProtoWriter.WriteFieldHeaderBegin(fieldNumber, dest);
                }
                else
                {
                    ProtoWriter.WriteFieldHeaderBeginIgnored(dest);
                }
            }
            else
            {
                // this can only be supported when wire type of elements will be the same each time and no field cancellations
                // we write only first header to get wire type
                // the difference between standard pack and this
                // is that we write wiretype here at the first time
                if (!pack || isFirst)
                {
                    ProtoWriter.WriteFieldHeaderBegin(fieldNumber, dest);
                }
                else
                {
                    ProtoWriter.WriteFieldHeaderBeginIgnored(dest);
                }
            }

            _tail.Write(obj, dest);
        }