我正在为类中的字段创建枚举,我需要其中一个值为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; }
}
}
答案 0 :(得分:2)
你不能。 C#中的标识符不允许破折号,因为它是一个运算符,因此对于枚举值来说是相同的。
没有办法解决这个问题。我建议将其替换为另一个符号,例如下划线(_
)。根据enum的使用,您可能会对序列化器感到满意。例如,如果您使用JSON,则可以以不同方式序列化和反序列化值。
答案 1 :(得分:2)
Enum成员就像其他所有标识符一样,因此他们的名字需要satisfy a set of rules。这些规则的一部分意味着您不能在标识符或枚举名称中使用破折号。
如果你仔细考虑它,它就没有多大意义。试想一下,如果Start
和up
是两个变量会发生什么。由于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();
}