字符串枚举中的C#Dash( - )

时间:2015-11-16 13:12:15

标签: c# enums

我正在为类中的字段创建枚举,我需要其中一个值为Start-up。但是,当我输入时,我收到错误} expected。另一方面,StartUp是允许的,但我真的需要短划线在那里..

我还有其他字段对空格有同样的问题..

有没有人知道我可以获得如上所示的价值的方式?

代码示例:

using System;

namespace XMLConverter.Models
{
    public enum SiteStatus { Hold, Planned, Proposed, Qualifying, StartUp, Open, Enrollment Complete, Closed, Stopped, Not Selected, Withdrew }

    public class Site
    {
        public string StudyName { get; set; }
        public string SiteNumber { get; set; }
        public string SiteName { get; set; }
        public SiteStatus SiteStatus { get; set; }
    }
}

4 个答案:

答案 0 :(得分:2)

你不能。 C#中的标识符不允许破折号,因为它是一个运算符,因此对于枚举值来说是相同的。

没有办法解决这个问题。我建议将其替换为另一个符号,例如下划线(_)。根据enum的使用,您可能会对序列化器感到满意。例如,如果您使用JSON,则可以以不同方式序列化和反序列化值。

答案 1 :(得分:2)

Enum成员就像其他所有标识符一样,因此他们的名字需要satisfy a set of rules。这些规则的一部分意味着您不能在标识符或枚举名称中使用破折号。

如果你仔细考虑它,它就没有多大意义。试想一下,如果Startup是两个变量会发生什么。由于C#忽略表达式中的空格,Start-up意味着Start - up这是一个减法操作。

虽然枚举成员本身需要是有效的标识符,但您可以控制如何将其呈现给其他方。例如,您可以使用DisplayAttribute来影响在UI上呈现的方式,DataMemberAttribute可以影响它的序列化方式。

答案 2 :(得分:0)

没有理由放" - "在枚举值中。

1.如果要以这种方式显示给应用程序用户,可以创建属性并在显示枚举值时检查属性的值。

2.as @patric指出用字符替换它并在显示值时检查字符的存在性并将其替换为' - '

答案 3 :(得分:0)

c#中的标识符不能包含短划线字符,因此您无法执行此操作。

如果您需要获取枚举值的说明,可以使用[Description]属性,例如:

enum TestEnum
{
    [Description("Start-up")]
    StartUp
}

TestEnum val = TestEnum.StartUp;
string desc = GetEnumDescription((TestEnum)val);

GetEnumDescription方法如下所示:(来源:How to get C# Enum description from value?

public static string GetEnumDescription(Enum value)
{
    FieldInfo fi = value.GetType().GetField(value.ToString());

    DescriptionAttribute[] attributes =
        (DescriptionAttribute[])fi.GetCustomAttributes(
        typeof(DescriptionAttribute),
        false);

    if (attributes != null &&
        attributes.Length > 0)
        return attributes[0].Description;
    else
        return value.ToString();
}