public override string ToString() { using (var code = new Microsoft.CSharp.CSharpCodeProvider()) { var hasParameters = NamedParameters.Count > 0 || Parameters.Count > 0; var parametersString = new StringBuilder(); if (hasParameters && Parameters.Count > 0) { Parameters.TakeWhile(x => Parameters.Last() != x) .ToList() .ForEach(x => parametersString.Append(string.Format("{0}, ", x))); parametersString.Append(Parameters.Last()); } if (hasParameters && NamedParameters.Count > 0) { NamedParameters.TakeWhile(x => NamedParameters.Last() != x) .ToList() .ForEach(x => parametersString.Append(string.Format("{0} = {1}, ", x.Item1, x.Item2))); parametersString.Append(string.Format("{0} = {1}", NamedParameters.Last().Item1, NamedParameters.Last().Item2)); } var retval = string.Format("[{0}{1}]", AttributeType.Name, hasParameters ? string.Format("({0})", parametersString) : ""); return(retval); } }