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