.NET
の列挙型を使用して以下を達成するにはどうすればよいですか?スペースを含む各値の説明が必要です。
public enum PersonGender
{
Unknown = 0,
Male = 1,
Female = 2,
Intersex = 3,
Indeterminate = 3,
Non Stated = 9,
Inadequately Described = 9
}
このタイプの値を使用するたびに、説明を使用するか整数を使用するかを選択できるようにします。
いいえ、できませんが、属性を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
値に変換する方法の詳細については、 このスレッド を参照してください。
これは簡単です。コーディング規約に基づいてフォーマットされた文字列を返す文字列の拡張メソッドを作成します。ここだけでなく、多くの場所で使用できます。これは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;
}
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
}
そのため、スペースはローカライズされたリソースに存在する可能性があります...