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); }