web-dev-qa-db-ja.com

スペース付きの列挙値を持つ方法は?

.NETの列挙型を使用して以下を達成するにはどうすればよいですか?スペースを含む各値の説明が必要です。

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

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

24
CJ7

いいえ、できませんが、属性を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値に変換する方法の詳細については、 このスレッド を参照してください。

40
p.s.w.g

これは簡単です。コーディング規約に基づいてフォーマットされた文字列を返す文字列の拡張メソッドを作成します。ここだけでなく、多くの場所で使用できます。これは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;
    }
5
theMayer
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
}          

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

1
Mohsen Heydari