2013-09-19 3 views
5

Я ищу решение для получения полной строки перечисления.C# Enum.ToString() с полным именем

Пример:

Public Enum Color 
{ 
    Red = 1, 
    Blue = 2 
} 
Color color = Color.Red; 

// This will always get "Red" but I need "Color.Red" 
string colorString = color.ToString(); 

// I know that this is what I need: 
colorString = Color.Red.ToString(); 

Так есть ли решение?

+1

'Color.Red.ToString()' возвращает 'Red'. – MarcinJuraszek

ответ

8
public static class Extensions 
{ 
    public static string GetFullName(this Enum myEnum) 
    { 
     return string.Format("{0}.{1}", myEnum.GetType().Name, myEnum.ToString()); 
    } 
} 

использование:

Color color = Color.Red; 
string fullName = color.GetFullName(); 

Примечание: Я думаю, что GetType().Name лучше, что GetType().FullName

+0

Хороший! Я использую это! – Franki1986

0

Я понятия не имею, если это лучший способ, но он работает:

string colorString = string.Format("{0}.{1}", color.GetType().FullName, color.ToString()) 
0

Попробуйте это:

 Color color = Color.Red; 

     string colorString = color.GetType().Name + "." + Enum.GetName(typeof(Color), color); 
+0

Цвет не является перечислением –

+0

Пожалуйста, объясните? Это рабочий код. – stevepkr84

+0

Очень жаль. 'Я думал, что Color is System.Drawing.Color' –

0
colorString = color.GetType().Name + "." + color.ToString(); 
1

Быстрый вариант, который работает для каждого перечисления

public static class EnumUtil<TEnum> where TEnum : struct 
{ 
    public static readonly Dictionary<TEnum, string> _cache; 

    static EnumUtil() 
    { 
     _cache = Enum 
      .GetValues(typeof(TEnum)) 
      .Cast<TEnum>() 
      .ToDictionary(x => x, x => string.Format("{0}.{1}", typeof(TEnum).Name, x)); 
    } 

    public static string AsString(TEnum value) 
    { 
     return _cache[value]; 
    } 
} 
Смежные вопросы