Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Based on http://stackoverflow.com/a/31839145/107625
- It didn't work correctly with an enum like:
- [Flags]
- public enum Test1
- {
- [Description("Letter-A")] A = 0x00, // Special case: Zero, no flags.
- [Description("Letter-B")] B = 0x01,
- [Description("Letter-C")] C = 0x02,
- [Description("Letter-D")] D = 0x04,
- [Description("Letter-E")] E = 0x08
- }
- My below solution (hopefully!) corrects the above false behaviour.
- Be aware that this _only_ works for enums with [Flags] attribute. It does _not_ work for enums without
- the [Flags] attribute.
- Some unit tests:
- [Flags]
- public enum Test1
- {
- [D("Letter-A")] A = 0x00, // Special case: Zero, no flags.
- [D("Letter-B")] B = 0x01,
- [D("Letter-C")] C = 0x02,
- [D("Letter-D")] D = 0x04,
- [D("Letter-E")] E = 0x08
- }
- public enum Test2
- {
- [D("Letter-A")] A,
- [D("Letter-B")] B,
- [D("Letter-C")] C,
- [D("Letter-D")] D,
- [D("Letter-E")] E
- }
- [Test]
- public void TestEnum1()
- {
- const Test1 t1 = Test1.A;
- const Test1 t2 = Test1.B;
- const Test1 t3 = Test1.B | Test1.C;
- var d1 = StringHelper.GetEnumDescription(t1);
- var d2 = StringHelper.GetEnumDescription(t2);
- var d3 = StringHelper.GetEnumDescription(t3);
- Assert.AreEqual(d1, "Letter-A");
- Assert.AreEqual(d2, "Letter-B");
- Assert.AreEqual(d3, "Letter-B, Letter-C");
- }
- [Test]
- public void TestEnum2()
- {
- const Test2 t1 = Test2.A;
- const Test2 t2 = Test2.B;
- const Test2 t3 = Test2.C;
- var d1 = StringHelper.GetEnumDescription(t1);
- var d2 = StringHelper.GetEnumDescription(t2);
- var d3 = StringHelper.GetEnumDescription(t3);
- Assert.AreEqual(d1, "Letter-A");
- Assert.AreEqual(d2, "Letter-B");
- Assert.AreEqual(d3, "Letter-C");
- }
- */
- public static string GetDescription(Enum value)
- {
- Type type = value.GetType();
- var values = Enum.GetValues(type);
- var setValues = new List<Enum>();
- foreach(var enumValue in values)
- {
- if ((int) enumValue == 0) // Added check.
- {
- if (value.Equals(enumValue))
- setValues.Add((Enum) enumValue);
- }
- else
- {
- if (value.HasFlag((Enum) enumValue))
- setValues.Add((Enum) enumValue);
- }
- }
- var stringList = new List<string>();
- foreach (var singleValue in setValues)
- {
- var name = Enum.GetName(type, singleValue);
- if (name != null)
- {
- FieldInfo field = type.GetField(name);
- if (field != null)
- {
- DescriptionAttribute attr =
- Attribute.GetCustomAttribute(field,
- typeof(DescriptionAttribute)) as DescriptionAttribute;
- if (attr != null)
- {
- stringList.Add(attr.Description);
- }
- }
- }
- }
- return string.Join(", ", stringList.ToArray());
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement