From 137750e18bbe823cf81aa67e338a11b7a4c52103 Mon Sep 17 00:00:00 2001 From: Tyler Brinkley Date: Fri, 3 Oct 2025 16:26:24 -0500 Subject: [PATCH 1/2] Add native support for DisplayAttribute.Description with EnumFormat.DisplayDescription --- Src/Enums.NET.Test/EnumsTest.cs | 5 +++++ Src/Enums.NET.TestEnums/CardinalDirection.cs | 15 +++++++++++++++ Src/Enums.NET/EnumCache.cs | 5 +++++ Src/Enums.NET/EnumFormat.cs | 6 +++++- 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 Src/Enums.NET.TestEnums/CardinalDirection.cs diff --git a/Src/Enums.NET.Test/EnumsTest.cs b/Src/Enums.NET.Test/EnumsTest.cs index 64fb247..42c2fc2 100644 --- a/Src/Enums.NET.Test/EnumsTest.cs +++ b/Src/Enums.NET.Test/EnumsTest.cs @@ -761,6 +761,11 @@ public void AsString_ReturnsValidResult_WhenUsingValidEnumFormat() AssertTryFormat(DisplayAttributeEnum.Left, "Izquierda", EnumFormat.DisplayName); AssertTryFormat(DisplayAttributeEnum.Right, "Derecho", EnumFormat.DisplayName); + AssertTryFormat(CardinalDirection.North, "N", EnumFormat.DisplayDescription); + AssertTryFormat(CardinalDirection.South, "S", EnumFormat.DisplayDescription); + AssertTryFormat(CardinalDirection.East, "E", EnumFormat.DisplayDescription); + AssertTryFormat(CardinalDirection.West, "W", EnumFormat.DisplayDescription); + AssertTryFormat(ToObject('a'), "a", EnumFormat.UnderlyingValue); AssertTryFormat(ToObject('a'), ((ushort)'a').ToString(), EnumFormat.DecimalValue); AssertTryFormat(ToObject('a'), ((ushort)'a').ToString("X4"), EnumFormat.HexadecimalValue); diff --git a/Src/Enums.NET.TestEnums/CardinalDirection.cs b/Src/Enums.NET.TestEnums/CardinalDirection.cs new file mode 100644 index 0000000..e226d76 --- /dev/null +++ b/Src/Enums.NET.TestEnums/CardinalDirection.cs @@ -0,0 +1,15 @@ +using System.ComponentModel.DataAnnotations; + +namespace EnumsNET.Tests.TestEnums; + +public enum CardinalDirection +{ + [Display(Description = "N")] + North, + [Display(Description = "S")] + South, + [Display(Description = "E")] + East, + [Display(Description = "W")] + West +} \ No newline at end of file diff --git a/Src/Enums.NET/EnumCache.cs b/Src/Enums.NET/EnumCache.cs index 57c849b..92b2988 100644 --- a/Src/Enums.NET/EnumCache.cs +++ b/Src/Enums.NET/EnumCache.cs @@ -727,6 +727,7 @@ public string AsString(TUnderlying value) EnumFormat.Description => GetMember(value)?.Attributes.Get()?.Description, EnumFormat.EnumMemberValue => GetMember(value)?.Attributes.Get()?.Value, EnumFormat.DisplayName => GetMember(value)?.Attributes.Get()?.GetName(), + EnumFormat.DisplayDescription => GetMember(value)?.Attributes.Get()?.GetDescription(), _ => Enums.CustomEnumMemberFormat(GetMember(value)?.EnumMember, format.Validate(nameof(format))) }; @@ -762,6 +763,7 @@ internal string AsStringInternal(TUnderlying value, EnumMemberInternal TryInitializeMember(value, ref isInitialized, ref member)?.Attributes.Get()?.Description, EnumFormat.EnumMemberValue => TryInitializeMember(value, ref isInitialized, ref member)?.Attributes.Get()?.Value, EnumFormat.DisplayName => TryInitializeMember(value, ref isInitialized, ref member)?.Attributes.Get()?.GetName(), + EnumFormat.DisplayDescription => TryInitializeMember(value, ref isInitialized, ref member)?.Attributes.Get()?.GetDescription(), _ => Enums.CustomEnumMemberFormat(TryInitializeMember(value, ref isInitialized, ref member)?.EnumMember, format.Validate(nameof(format))) }; @@ -868,6 +870,9 @@ internal bool TryFormatInternal(TUnderlying value, EnumMemberInternal()?.GetName(); return TryWriteStringToSpan(displayName, destination, out charsWritten); + case EnumFormat.DisplayDescription: + var displayDescription = TryInitializeMember(value, ref isInitialized, ref member)?.Attributes.Get()?.GetDescription(); + return TryWriteStringToSpan(displayDescription, destination, out charsWritten); default: var v = Enums.CustomEnumMemberFormat(TryInitializeMember(value, ref isInitialized, ref member)?.EnumMember, format.Validate(nameof(format))); return TryWriteStringToSpan(v, destination, out charsWritten); diff --git a/Src/Enums.NET/EnumFormat.cs b/Src/Enums.NET/EnumFormat.cs index 5712b49..24650e7 100644 --- a/Src/Enums.NET/EnumFormat.cs +++ b/Src/Enums.NET/EnumFormat.cs @@ -63,7 +63,11 @@ public enum EnumFormat /// /// Enum is represented by its . /// - DisplayName = 6 + DisplayName = 6, + /// + /// Enum is represented by its . + /// + DisplayDescription = 7 } [AttributeUsage(AttributeTargets.Enum)] From 6f9ac7bb22762fc491ebc8e60de848bb558cd73b Mon Sep 17 00:00:00 2001 From: Tyler Brinkley Date: Fri, 3 Oct 2025 17:02:44 -0500 Subject: [PATCH 2/2] Fix --- Src/Enums.NET/Enums.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Src/Enums.NET/Enums.cs b/Src/Enums.NET/Enums.cs index 893653e..fe24550 100644 --- a/Src/Enums.NET/Enums.cs +++ b/Src/Enums.NET/Enums.cs @@ -190,7 +190,7 @@ internal static ValueCollection NameFormat } #region Custom EnumFormat - private const int s_startingCustomEnumFormatValue = (int)EnumFormat.DisplayName + 1; + private const int s_startingCustomEnumFormatValue = (int)EnumFormat.DisplayDescription + 1; private static Func[] s_customEnumMemberFormatters = [];