原始C#测试代码
public class Test
{
public static string P1 = "XXXXX";
public static string P2 = "XXXXX";
}
转换结果
public enum Test
{
/// <summary>
/// XXXXXX
/// </summary>
[Description("XXXXXX")]
P1 = 0,
/// <summary>
/// XXXXXX
/// </summary>
[Description("XXXXXX")]
P2 = 1,
}
转换代码简单实现
public static string ConverClassPropertyToEnum(string filename)
{
StringBuilder sb = new StringBuilder();
int idx = 0;
string[] lines = File.ReadAllLines(filename);
foreach (string line in lines)
{
string pattern = "([\\s]+)(public static string )([\\w]+)([\\w=\\s]+)\"([\\w\\s.~&]+)\";";
Match match = Regex.Match(line, pattern);
if (match != null && match.Groups.Count > 5)
{
string description = $@" /// <summary>
/// {match.Groups[5].Value}
/// </summary>
";
sb.Append(description);
sb.Append($"{match.Groups[1].Value}[Description(\"{match.Groups[5].Value}\")]\r\n");
sb.Append($"{match.Groups[1].Value}{match.Groups[3].Value} = {idx++},\r\n");
continue;
}
match = Regex.Match(line, "([\\s\\w]+)(public class )([\\w]+)([\\s]+)?");
if (match != null && match.Groups.Count > 4)
{
sb.Append($"{match.Groups[1].Value}public enum {match.Groups[3].Value}");
idx = 0;
continue;
}
sb.Append(line);
sb.AppendLine();
}
return sb.ToString();
}
}
调用:
string s = ConverClassPropertyToEnum(@"D:\test\Core\enum.cs");
Console.WriteLine(s);