Преобразование этого из фрагмента кода vb, который некий Иан Хорвилл оставил в сообщении в блоге давно ... с тех пор я успешно использовал его в работе.
/// <summary>
/// Add spaces to separate the capitalized words in the string,
/// i.e. insert a space before each uppercase letter that is
/// either preceded by a lowercase letter or followed by a
/// lowercase letter (but not for the first char in string).
/// This keeps groups of uppercase letters - e.g. acronyms - together.
/// </summary>
/// <param name="pascalCaseString">A string in PascalCase</param>
/// <returns></returns>
public static string Wordify(string pascalCaseString)
{
Regex r = new Regex("(?<=[a-z])(?<x>[A-Z])|(?<=.)(?<x>[A-Z])(?=[a-z])");
return r.Replace(pascalCaseString, " ${x}");
}
(требуется, 'используя System.Text.RegularExpressions;')
Таким образом:
Console.WriteLine(Wordify(ThisIsValueA.ToString()));
Вернется,
"This Is Value A".
Это намного проще и менее избыточно, чем предоставление атрибутов Description.
Атрибуты здесь полезны только в том случае, если вам нужно обеспечить слой косвенности (о котором вопрос не задавался).