28

で列挙型を使用して次のことをどのように達成でき.NETますか?スペースを含む各値の説明が必要です。

public enum PersonGender
    {
        Unknown = 0,
        Male = 1,
        Female = 2,
        Intersex = 3,
        Indeterminate = 3,
        Non Stated = 9,
        Inadequately Described = 9
    }

このタイプの値を使用するたびに、説明と整数のどちらを使用するかを選択できるようにしたいと思います。

4

3 に答える 3

48

いいえ、それは不可能ですが、enumメンバーに属性を付けることはできます。はEnumMemberAttribute、あなたが説明した目的のために正確に設計されています。

public enum PersonGender
{
    Unknown = 0,
    Male = 1,
    Female = 2,
    Intersex = 3,
    Indeterminate = 3,

    [EnumMember(Value = "Not Stated")]
    NonStated = 9,

    [EnumMember(Value = "Inadequately Described")]
    InadequatelyDescribed = 9
}

を使用して文字列を値EnumMemberAttributeに変換する方法の詳細については、このスレッドを参照してください。enum

于 2013-03-17T06:45:12.043 に答える
5

かんたんだよ。コーディング規約に基づいて書式設定された文字列を返す、文字列の拡張メソッドを作成します。ここだけでなく、いろいろなところで使えます。これは camelCase と TitleCase で機能します。

    public static String ToLabelFormat(this String s)
    {
        var newStr = Regex.Replace(s, "(?<=[A-Z])(?=[A-Z][a-z])", " ");
        newStr = Regex.Replace(newStr, "(?<=[^A-Z])(?=[A-Z])", " ");
        newStr = Regex.Replace(newStr, "(?<=[A-Za-z])(?=[^A-Za-z])", " ");

        return newStr;
    }
于 2013-03-17T06:46:58.000 に答える
1
var assembly = Assembly.LoadFrom("ResourcesLib.DLL");            
var resourceManager =
new ResourceManager("ResourcesLib.EnumDescriptions", assembly);                        

var lst = Enum.GetValues(typeof(PersonGender)).Cast<PersonGender>().ToList();
foreach (var gender in lst)
{
  Console.WriteLine(gender); // Name
  Console.WriteLine((int)gender); //Int Value
  Console.WriteLine(resourceManager.GetString(gender.ToString()));//localized Resorce
}          

したがって、スペースはローカライズされたリソースに存在する可能性があります...

于 2013-03-17T07:19:04.210 に答える