Roslyn+T4+EnvDTE项目完全自动化(5) ——自动生成ToString方法


(视频演示)

resharper 的Refactor生成 ToString在某些场景,很不方便,无法批量生成,无法从特性、注释获取,自己用Roslyn重新写一个解决这些问题

需求:批量生成ToString方法

  1. 对类自动生成ToString方法
  2. 支持插值、StringBuilder输出
  3. 文字描述从特性、注释获取
  4. 支持nameof
  5. 自动对齐
  6. 可以自动翻译字段
 1 public partial class film
 2 {
 3     public override string ToString()
 4     {
 5         var sb = new System.Text.StringBuilder(254);
 6         sb.AppendLine($"             {nameof(film_id)}: {film_id}");
 7         sb.AppendLine($"               {nameof(title)}: {title}");
 8         sb.AppendLine($"         {nameof(description)}: {description}");
 9         sb.AppendLine($"        {nameof(release_year)}: {release_year}");
10         sb.AppendLine($"         {nameof(language_id)}: {language_id}");
11         sb.AppendLine($"{nameof(original_language_id)}: {original_language_id}");
12         sb.AppendLine($"     {nameof(rental_duration)}: {rental_duration}");
13         sb.AppendLine($"         {nameof(rental_rate)}: {rental_rate}");
14         sb.AppendLine($"              {nameof(length)}: {length}");
15         sb.AppendLine($"    {nameof(replacement_cost)}: {replacement_cost}");
16         sb.AppendLine($"              {nameof(rating)}: {rating}");
17         sb.AppendLine($"    {nameof(special_features)}: {special_features}");
18         sb.AppendLine($"         {nameof(last_update)}: {last_update}");
19         sb.AppendLine($"            {nameof(language)}: {language}");
20         sb.AppendLine($"           {nameof(language1)}: {language1}");
21         return sb.ToString(0, sb.Length - 2);
22     }
23 }