Example #1
0
        /// <summary>
        /// Creates a generic parameter from a generic parameter metadata row.
        /// </summary>
        /// <param name="parentModule">The module that contains the generic parameter.</param>
        /// <param name="token">The token to initialize the generic parameter for.</param>
        /// <param name="row">The metadata table row to base the generic parameter on.</param>
        public SerializedGenericParameter(SerializedModuleDefinition parentModule, MetadataToken token, GenericParameterRow row)
            : base(token)
        {
            _parentModule = parentModule ?? throw new ArgumentNullException(nameof(parentModule));
            _row          = row;

            Attributes = _row.Attributes;
            Number     = row.Number;
        }
        private void DefineGenericParameter(MetadataToken ownerToken, GenericParameter parameter)
        {
            if (parameter is null || !AssertIsImported(parameter))
            {
                return;
            }

            var table   = Metadata.TablesStream.GetSortedTable <GenericParameter, GenericParameterRow>(TableIndex.GenericParam);
            var encoder = Metadata.TablesStream.GetIndexEncoder(CodedIndex.TypeOrMethodDef);

            var row = new GenericParameterRow(
                parameter.Number,
                parameter.Attributes,
                encoder.EncodeToken(ownerToken),
                Metadata.StringsStream.GetStringIndex(parameter.Name));

            table.Add(parameter, row);
        }