如何在枚举值中包含空格?

15 浏览
0 Comments

如何在枚举值中包含空格?

我如何在.NET中使用枚举来实现以下功能?我希望每个值都有包含空格的描述。

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

每次使用该类型的值时,我希望能够选择使用描述或整数。

0
0 Comments

问题出现的原因:本段代码中的枚举值带有空格,导致无法正确获取本地化资源。

解决方法:将枚举值中的空格去除,或者使用其他方式来获取本地化资源。

0
0 Comments

问题的出现原因:

枚举值通常是用来表示一组相关的常量,这些常量在代码中使用时往往是以无空格的形式表示的。然而,有时候我们希望在枚举值中包含空格,以提高可读性或与现实世界的概念更好地对应。然而,在传统的枚举定义中,空格是不允许的,因此我们需要找到一种解决方法来实现这个需求。

解决方法:

下面是一种解决方法,通过创建一个字符串的扩展方法,根据编码规范返回一个格式化的字符串。这个方法可以在很多地方使用,不仅仅是在枚举值中。以下是一个适用于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;
}

使用这个方法,我们可以将枚举值中的大写字母和单词分隔开,从而在输出时显示空格。例如,假设我们有一个名为"Color"的枚举,其中包含"Red"、"Green"和"Blue"三个枚举值。在使用这个扩展方法之前,输出的枚举值将是"Red"、"Green"和"Blue";而在使用了这个扩展方法之后,输出的枚举值将是"Red"、"Green"和"Blue",更加易读。

在代码中使用这个扩展方法非常简单,只需将其应用于需要格式化的字符串即可。例如,在枚举定义中,我们可以这样使用这个扩展方法:

public enum Color
{
    Red,
    Green,
    Blue
}
public static void Main()
{
    foreach (Color color in Enum.GetValues(typeof(Color)))
    {
        Console.WriteLine(color.ToString().ToLabelFormat());
    }
}

输出结果将是:

Red
Green
Blue

通过使用这个扩展方法,我们可以在枚举值中包含空格,从而提高代码的可读性和可维护性。

0
0 Comments

问题的出现的原因是无法在枚举值中包含空格,但可以通过使用属性来给枚举成员附加信息来解决这个问题。其中,EnumMemberAttribute是专门为此目的设计的。

解决方法是在枚举成员上使用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。关于如何使用EnumMemberAttribute进行字符串转换的更多信息,请参考[这个帖子](https://stackoverflow.com/questions/10418651)。

此外,还可以使用DescriptionAttribute或自定义的属性类来实现相同的功能。需要注意的是,这些属性类的AttributeTargets必须是Field或All。

如果在项目中找不到EnumMemberAttribute,可能需要将System.Runtime.Serialization添加为项目的引用,并在文件中添加using语句。

参考资料:[Building and Cleaning Projects and Solutions in Visual Studio](http://msdn.microsoft.com/en-us/library/5tdasz7h.aspx)

0