using System.Runtime.Serialization;
public static void Main()
Console.WriteLine(DuvodEnum.Dovolena.ToEnumString());
Console.WriteLine(DuvodEnum.Nemoc.ToEnumString());
Console.WriteLine(DuvodEnum.VolnyPatek.ToEnumString());
Console.WriteLine("1".ToEnum<DuvodEnum>());
Console.WriteLine("2".ToEnum<DuvodEnum>());
Console.WriteLine("P".ToEnum<DuvodEnum>());
[EnumMember(Value = "1")]
[EnumMember(Value = "2")]
[EnumMember(Value = "P")]
public static class Extensions {
public static string ToEnumString<T>(this T type)
var enumType = typeof (T);
var name = Enum.GetName(enumType, type);
var enumMemberAttribute = ((EnumMemberAttribute[])enumType.GetField(name).GetCustomAttributes(typeof(EnumMemberAttribute), true)).Single();
return enumMemberAttribute.Value;
public static T ToEnum<T>(this string str)
var enumType = typeof(T);
foreach (var name in Enum.GetNames(enumType))
var enumMemberAttribute = ((EnumMemberAttribute[])enumType.GetField(name).GetCustomAttributes(typeof(EnumMemberAttribute), true)).Single();
if (enumMemberAttribute.Value == str) return (T)Enum.Parse(enumType, name);