public bool AppendAttributes(StringBuilderWrapper sb, List<MetadataAttribute> attributes)
{
if (attributes == null || attributes.Count == 0) return false;
foreach (var attr in attributes)
{
if ((attr.Args == null || attr.Args.Count == 0)
&& (attr.ConstructorArgs == null || attr.ConstructorArgs.Count == 0))
{
sb.AppendLine($"[{attr.Name}]");
}
else
{
var args = StringBuilderCacheAlt.Allocate();
if (attr.ConstructorArgs != null)
{
foreach (var ctorArg in attr.ConstructorArgs)
{
if (args.Length > 0)
args.Append(", ");
args.Append($"{TypeValue(ctorArg.Type, ctorArg.Value)}");
}
}
else if (attr.Args != null)
{
foreach (var attrArg in attr.Args)
{
if (args.Length > 0)
args.Append(", ");
args.Append($"{attrArg.Name}={TypeValue(attrArg.Type, attrArg.Value)}");
}
}
sb.AppendLine($"[{attr.Name}({StringBuilderCacheAlt.ReturnAndFree(args)})]");
}
}
return true;
}