public static void AcceptVisitor <TResult> ( this CustomAttribute customAttribute, MetadataVisitor <TResult> visitor) { if (!visitor.ShouldTraverseInto(visitor.VisitCustomAttribute(customAttribute))) { return; } customAttribute.AttributeType.AcceptVisitor(visitor); customAttribute.Constructor.AcceptVisitor(visitor); if (customAttribute.HasConstructorArguments) { foreach (var argument in customAttribute.ConstructorArguments) { argument.AcceptVisitor(visitor); } } if (customAttribute.HasFields) { foreach (var field in customAttribute.Fields) { field.AcceptVisitor(visitor); } } if (customAttribute.HasProperties) { foreach (var property in customAttribute.Properties) { property.AcceptVisitor(visitor); } } }