2014-06-15 4 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#으로 표시됩니다. 이것을 달성하는 방법?# 문자로 enum을 작성하는 방법은 무엇입니까?

시도 : How to use ? character in an enum이지만 Description[Description("F#")] 인 것 같습니다. (빨간색 선으로 밑줄, 그것도하지 않습니다 내가 마우스 오른쪽 버튼으로 클릭하면 "해결"아무것도 보여줍니다

업데이트 :. 부연 설명 :.

  1. 을 중복 대답이 아니기 때문에 그것은 중복이 아니다 enum하지만 enum로 구성된 클래스. 나는 enum 원하는 솔루션을 제공합니다.
  2. 이 가능하지 않는 경우, 오히려 중복으로 표시하는 것보다, "그것은 불가능"대답하십시오.
  3. 이미 전에 읽기를 이 게시물을 만들었습니다.

고맙습니다.

+3

추가','파일의 상단에, 'Description' 속성을 사용합니다. –

+0

@GrantWinney는 아직 설명이 없습니다. 내가 잘못 한 것을 몰라. 라이브러리를 포함하도록 코드를 수정하겠습니다. –

+0

어떤 유형의 프로젝트입니까? –

답변

7

은 PCL 프레임 워크에서 수행 할 수 있습니다. 단순한 버전의 속성을 만들 수 있습니다.

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

당신의 열거를 들어 : System.ComponentModel를 사용

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

이 코드 대신에 "합법적 인 캐릭터"를 사용하기로 결정한 경우에도 이것이 유용 할 것이라고 생각합니다. 그래서 나는 그것을 받아 들일 것이다. 감사. –

+0

업데이트 : 추가 코드 대신에 "합법적 인 캐릭터"를 사용하기로 결정한 경우에도 이것이 유용 할 것이라고 생각합니다. 나는 미래에 내 마음을 바꿀 수도 있으므로 받아 들일 것입니다. 감사. –

1

DescriptionAttribute는 System.ComponentModel의 일부입니다.

그래서 당신은 열거 텍스트를 연결하려는 경우, 당신은 Description 속성을 허용하지 않습니다 using System.ComponentModel;

+0

여전히 작동하지 않습니다. –

+0

이미 제안했지만 작동하지 않았습니다. –

관련 문제