private void LoadSignatureGeneral(SignatureKinds signatureKind, uint heapIndex, _ICliMetadataBlobEntry entry)
        {
            lock (this.syncObject)
            {
                uint offset = heapIndex + entry.LengthByteCount;

                this.reader.BaseStream.Seek(offset, SeekOrigin.Begin);
                switch (signatureKind)
                {
                case SignatureKinds.MethodDefSig:
                    entry.Signature = SignatureParser.ParseMethodDefSig(this.reader, metadataRoot);
                    break;

                case SignatureKinds.MethodRefSig:
                    entry.Signature = SignatureParser.ParseMethodRefSig(this.reader, metadataRoot);
                    break;

                case SignatureKinds.FieldSig:
                    entry.Signature = SignatureParser.ParseFieldSig(this.reader, metadataRoot);
                    break;

                case SignatureKinds.PropertySig:
                    entry.Signature = SignatureParser.ParsePropertySig(this.reader, metadataRoot);
                    break;

                case SignatureKinds.StandaloneSignature:
                    entry.Signature = SignatureParser.ParseStandaloneSig(this.reader, metadataRoot);
                    break;

                case SignatureKinds.CustomModifier:
                    entry.Signature = SignatureParser.ParseCustomModifier(this.reader, metadataRoot);
                    break;

                case SignatureKinds.Param:
                    entry.Signature = SignatureParser.ParseParam(this.reader, metadataRoot);
                    break;

                case SignatureKinds.Type:
                    entry.Signature = SignatureParser.ParseType(this.reader, metadataRoot);
                    break;

                case SignatureKinds.ArrayShape:
                    entry.Signature = SignatureParser.ParseArrayShape(this.reader, metadataRoot);
                    break;

                case SignatureKinds.TypeSpec:
                    entry.Signature = SignatureParser.ParseTypeSpec(this.reader, metadataRoot);
                    break;

                case SignatureKinds.MethodSpec:
                    entry.Signature = SignatureParser.ParseMethodSpec(this.reader, metadataRoot);
                    break;

                case SignatureKinds.MemberRefSig:
                    entry.Signature = SignatureParser.ParseMemberRefSig(this.reader, metadataRoot);
                    break;

                default:
                    throw new ArgumentOutOfRangeException("signatureKind");
                }
            }
        }