10

キャメルケースのクラス名または列挙名を取り、ユーザーに対して通常のテキストで表示したいと思います。プログラムでこれを行うにはどうすればよいですか?

サンプル入力:

メインページの背景色

期待される出力:

メインページの背景色

また

メインページの背景色

4

6 に答える 6

10

正規表現オプション:

public static string ToMeaningfulName(this string value)
{
    return Regex.Replace(value, "(?!^)([A-Z])", " $1");
}

「MainPageBackgroundColor」を入力

出力 - 「メインページの背景色」

于 2013-06-13T19:26:53.340 に答える
8

string 次の方法で、キャメルケースの a をスペースで区切られた表示可能な文字列に変換できます。

public static string DisplayCamelCaseString(string camelCase)
{
    List<char> chars = new List<char>();
    chars.Add(camelCase[0]);
    foreach(char c in camelCase.Skip(1))
    {
        if (char.IsUpper(c))
        {
            chars.Add(' ');
            chars.Add(char.ToLower(c));
        }
        else
            chars.Add(c);
    }

    return new string(chars.ToArray());
}

これにより、「CamelCase」から「Camel case」または「SomeRandomEnumeration」から「Some random enumeration」に変換されます。

于 2013-06-13T17:45:56.600 に答える
2

締めくくりとして、Linq と拡張メソッドを使用した代替ソリューションを紹介します。

public static string ToSentenceCase(this string value)
{
    string[] spacedWords
        = ((IEnumerable<char>)value).Skip(1)
        .Select(c => c == char.ToUpper(c)
            ? " " + char.ToLower(c).ToString() 
            : c.ToString()).ToArray();

    string result = value.Substring(0, 1)
        + (String.Join("", spacedWords)).Trim();

    return result;
}

戻り値: 「メイン ページの背景色」

public static string ToTitleCase(this string value)
{
    string[] spacedWords 
        = ((IEnumerable<char>)value)
        .Select(c => c == char.ToUpper(c) 
            ? " " + c.ToString() 
            : c.ToString()).ToArray();

    return (String.Join("", spacedWords)).Trim();
}

戻り値: 「メイン ページの背景色」

于 2013-11-15T06:17:54.247 に答える
0

これが私が最初に行った方法です。高速で期待どおりに動作しますが、他の回答を見て、回答としてマークしたものに変更しました。

public static string CamelCaseToDisplayName<T>(this T enumeration)
{
    string name = enumeration.ToString();

    for (int i = 1; i < name.Length; i++)
    {
        char c = name[i];

        if (c >= 'A' && c <= 'Z')
        {
            name = name.Remove(i, 1);
            name = name.Insert(i++, ((char)(c + 0x30)).ToString());
            name = name.Insert(i, " ");
        }
    }

    return name;
}
于 2013-06-13T17:30:17.577 に答える