1. ホーム
  2. c#

[解決済み] キャメルケースの分割

2023-05-25 19:30:22

質問

これは、すべてのasp.netのc#です。

私はenumを持っています

public enum ControlSelectionType 
{
    NotApplicable = 1,
    SingleSelectRadioButtons = 2,
    SingleSelectDropDownList = 3,
    MultiSelectCheckBox = 4,
    MultiSelectListBox = 5
}

この数値は私のデータベースに保存されています。私はこの値をデータグリッドに表示します。

<asp:boundcolumn datafield="ControlSelectionTypeId" headertext="Control Type"></asp:boundcolumn>

IDはユーザーにとって何の意味もないので、boundcolumnを以下のようにしてテンプレートカラムに変更しました。

<asp:TemplateColumn>
    <ItemTemplate>
        <%# Enum.Parse(typeof(ControlSelectionType), DataBinder.Eval(Container.DataItem, "ControlSelectionTypeId").ToString()).ToString()%>
    </ItemTemplate>
</asp:TemplateColumn>

これでだいぶ良くなりました...。しかし、Enumをキャメルケースで分割して、単語がデータグリッドでうまくラップされるようにするための簡単な関数があれば最高です。

注: 私は、これらすべてを行うより良い方法があることを十分に認識しています。この画面は純粋に内部的に使用され、私はそれを少し良く表示するための迅速なハックが欲しいだけです。

どのように解決するのですか?

確かに正規表現と置換は他の回答にあるように行く方法ですが、あなたが別の方向に行きたい場合は、これはまた、あなたに役立つかもしれません。

    using System.ComponentModel;
    using System.Reflection;

...

    public static string GetDescription(System.Enum value)
    {
        FieldInfo fi = value.GetType().GetField(value.ToString());
        DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
        if (attributes.Length > 0)
            return attributes[0].Description;
        else
            return value.ToString();
    }

これにより、Enumを以下のように定義することができます。

public enum ControlSelectionType 
{
    [Description("Not Applicable")]
    NotApplicable = 1,
    [Description("Single Select Radio Buttons")]
    SingleSelectRadioButtons = 2,
    [Description("Completely Different Display Text")]
    SingleSelectDropDownList = 3,
}

より引用

http://www.codeguru.com/forum/archive/index.php/t-412868.html