2014-06-15 37 views
2
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ComponentModel; 

namespace NumberedMusicScores 
{ 
    public enum KeySignatures 
    { 
     C, 
     G, 
     D, 
     A, 
     E, 
     B, 
     FCress, 
     CCress, 
     F, 
     Bb, 
     Eb, 
     Ab, 
     Db, 
     Gb, 
     Cb 
    } 
} 

我想FCressCCress顯示爲F#和C#,如果我使用它。如何實現這一目標?如何用#字符編寫枚舉?

我試過這個:How to use ? character in an enum,但Description[Description("F#")]似乎不存在。 (紅色線條強調的那樣,它甚至不顯示任何東西「解決」,如果我右鍵點擊它

更新:澄清:

  1. 這不是一個重複的由於重複的答案是不是。 enum,但其配置爲enum一類。我想enum解決方案。
  2. 如果是不可能的,那麼請回答「這是不可能的」,而不是將其標記爲重複。
  3. 我之前已經看過他們我發了這篇文章。

謝謝。

+3

加上'使用System.ComponentModel;'到你的文件的頂部,使用'Description'屬性。 –

+0

@GrantWinney仍然沒有顯示「Description」。不知道我做錯了什麼。我將編輯我的代碼以包含庫。 –

+0

這是什麼類型的項目? –

回答

7

的PCL框架這樣做不會讓Description屬性。您可以創建該屬性的簡化版本。

public class MyDescription : Attribute 
{   
    public string Description = { get; private set; } 

    public MyDescription(string description) 
    { 
     Description = description; 
    } 
} 

然後用托馬斯的回答從this thread,這樣做:

public static string GetDescription(this Enum value) 
{ 
    Type type = value.GetType(); 
    string name = Enum.GetName(type, value); 
    if (name != null) 
    { 
     FieldInfo field = type.GetField(name); 
     if (field != null) 
     { 
      MyDescription attr = 
        Attribute.GetCustomAttribute(field, 
        typeof(MyDescription)) as MyDescription; 
      if (attr != null) 
      { 
       return attr.Description; 
      } 
     } 
    } 
    return null; 
} 

爲了您的枚舉:

public enum KeySignatures 
{ 
    //... 
    [MyDescription("F#")] 
    FCress, 
    [MyDescription("C#")] 
    CCress, 
    //... 
} 
+0

我認爲這對別人有用,即使我最終決定使用「合法字符」而不是此代碼。所以我會接受它。謝謝。 –

+0

更新:我認爲這將對某人有用,儘管現在我決定使用「合法字符」而不是其他代碼。我將來可能會改變主意,所以我會接受它。謝謝。 –

1

DescriptionAttribute是System.ComponentModel的一部分。

所以,如果你想文本枚舉關聯,您可以通過using System.ComponentModel;

+0

它仍然不起作用。 –

+0

已經建議,它沒有工作。 –