コード例 #1
0
        public PropertyDefinitionHandle CreatePropertiesForType(PropertyInfo[] properties)
        {
            if (properties.Length == 0)
            {
                return(default(PropertyDefinitionHandle));
            }

            var handles = new PropertyDefinitionHandle[properties.Length];

            for (var i = 0; i < properties.Length; i++)
            {
                var property = properties[i];

                if (_propertyHandles.TryGetValue(property, out var propertyDef))
                {
                    handles[i] = propertyDef;
                    continue;
                }

                propertyDef = _metadataBuilder.AddProperty(
                    property.Attributes,
                    GetString(property.Name),
                    GetPropertySignature(property));

                _propertyHandles.Add(property, propertyDef);

                handles[i] = propertyDef;

                var getMethod = property.GetGetMethod(true);
                if (getMethod != null)
                {
                    _metadataBuilder.AddMethodSemantics(
                        propertyDef,
                        MethodSemanticsAttributes.Getter,
                        GetOrCreateMethod(getMethod));
                }

                var setMethod = property.GetSetMethod(true);
                if (setMethod != null)
                {
                    _metadataBuilder.AddMethodSemantics(
                        propertyDef,
                        MethodSemanticsAttributes.Setter,
                        GetOrCreateMethod(setMethod));
                }
            }

            return(handles.First());
        }