Beispiel #1
0
 public GenericParameter(int index, string name, GenericParameterAttributes attributes = GenericParameterAttributes.NonVariant)
     : base(new MetadataToken(MetadataTokenType.GenericParam))
 {
     _owner      = new LazyValue <IGenericParameterProvider>();
     Index       = index;
     _name       = new LazyValue <string>(name);
     Attributes  = attributes;
     Constraints = new GenericParameterConstraintCollection(this);
 }
        internal GenericParameter(MetadataImage image, MetadataRow <ushort, GenericParameterAttributes, uint, uint> row)
            : base(row.MetadataToken)
        {
            _image     = image;
            Index      = row.Column1;
            Attributes = row.Column2;

            _owner = new LazyValue <IGenericParameterProvider>(() =>
            {
                var encoder    = image.Header.GetStream <TableStream>().GetIndexEncoder(CodedIndex.TypeOrMethodDef);
                var ownerToken = encoder.DecodeIndex(row.Column3);
                return(image.TryResolveMember(ownerToken, out var member) ? (IGenericParameterProvider)member : null);
            });

            _name       = new LazyValue <string>(() => image.Header.GetStream <StringStream>().GetStringByOffset(row.Column4));
            Constraints = new GenericParameterConstraintCollection(this);
        }