2015-11-16 27 views
-4

我正在創建一個類的字段的枚舉,我需要其中一個值爲Start-up。但是,當我輸入這個時,我得到一個錯誤} expected。啓動時,在另一方面,被允許但我真的需要儀表板是在那裏..在字符串枚舉中的C#破折號( - )

我也有與空間同樣的問題等領域..

有誰知道的一種方式,我可以得到如上所示的值?

代碼示例:

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; } 
    } 
} 
+1

您能否展示一個簡單但完整的程序來展示您的問題?看看[2.4.2標識符](https://msdn.microsoft.com/en-us/library/aa664670.aspx) –

+5

_「我需要其中一個值爲'Start-up'」_ - **爲什麼**?例如,如果您正在序列化此類型,則可以使用屬性更改序列化的值。 – CodeCaster

+0

「字符串枚舉」? – crashmstr

回答

1

在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(); 
} 
2

你不能。 C#中的標識符不允許破折號,因爲它是一個運算符,所以枚舉值也是一樣的。

有沒有辦法解決這個問題。我建議替換另一個符號,如下劃線(_)。根據枚舉的用法,你可能會對你的序列化器有好運。例如,如果您使用JSON,則可能會以不同的方式對值進行序列化和反序列化。

+0

_「這是沒有辦法」 - - 有。如果是用於JSON序列化,爲了命名一個東西,你可以使用屬性。 – CodeCaster

+1

好的,但標識符的名稱不會改變,只是它是如何序列化的。 –

+1

@CodeCaster詳細闡述了你的場景。 –

2

枚舉成員就像每個其他標識符一樣,因此它們的名稱需要satisfy a set of rules。部分規則意味着您不能在標識符或枚舉名稱中使用破折號。

如果您實際考慮它,這並沒有多大意義。想象一下,如果Startup是兩個變量會發生什麼。由於C#忽略表達式中的空格,因此Start-up意味着Start - up這是一個減法操作。

雖然枚舉成員本身需要是一個有效的標識符,您可以控制它如何呈現給其他方。例如,您可以使用DisplayAttribute來影響它在UI上的呈現方式,您可以使用DataMemberAttribute來影響其如何序列化。

0

沒有理由在枚舉值中加入「 - 」。

1.如果要以這種方式將其顯示給應用程序用戶,您可以創建屬性並在顯示枚舉值時檢查該屬性的值。

2.as @patric指出了一個字符替換它,並顯示值時選擇字符的存在性,取而代之的是「 - 」