Skip to content

Get an Enum Member as a String in C#: .NET 10, generic GetName, format specifiers, custom strings - #2292

Open
vladimir-pecanac-main wants to merge 1 commit into
CodeMazeBlog:mainfrom
vladimir-pecanac-main:seo/79072-enum-member-as-string-csharp
Open

vladimir-pecanac-main wants to merge 1 commit into
CodeMazeBlog:mainfrom
vladimir-pecanac-main:seo/79072-enum-member-as-string-csharp

Conversation

@vladimir-pecanac-main

Copy link
Copy Markdown
Collaborator

Sample update for the article "How to Get an Enum Member as a String in C#" (https://code-maze.com/enum-member-as-string-csharp/). Only strings-csharp/EnumMemberAsString changes.

Changes:

  • Both projects retargeted from net7.0 to net10.0.
  • Packages, re-queried on NuGet on 2026-10-11 (latest listed stable): Microsoft.NET.Test.Sdk 18.10.1, xunit 2.9.3, xunit.runner.visualstudio 4.0.1, coverlet.collector 10.1.0. The test framework stays xunit.
  • The GetName tests in EnumUnitTests and InstanceUnitTests use the generic Enum.GetName(). One test keeps the non-generic Enum.GetName(Type, object) overload for an enum type that is only known at run time (WhenEnumTypeIsOnlyKnownAtRuntime_ThenGetNameStillReturnsString).
  • New test for the G, D, X and F format specifiers (Australia: Australia, 2, 00000002, Australia; USA: 0 and 00000000 for D and X).
  • New test for an undefined value: Enum.GetName((Country)20) is null and ((Country)20).ToString() is "20".
  • New Region enum and Trip class. CustomStringUnitTests shows that System.Text.Json writes "NorthAmerica" for a member carrying [EnumMember(Value = "north-america")], writes "asia-pacific" for [JsonStringEnumMemberName("asia-pacific")], and reads a [Description] back with reflection.
  • Person uses a primary constructor.

Build and test on SDK 10.0.302 / runtime 10.0.10: dotnet build -c Release 0 warnings, 0 errors; dotnet test 12 passed, 0 failed. dotnet list package --vulnerable --include-transitive: no vulnerable packages. No test name contains Live.

…ifiers, custom strings

- Retarget both projects from net7.0 to net10.0.
- Bump Microsoft.NET.Test.Sdk 18.10.1, xunit 2.9.3, xunit.runner.visualstudio 4.0.1,
  coverlet.collector 10.1.0.
- Move the GetName tests to Enum.GetName<Country>() and keep one test on the
  non-generic overload for an enum type only known at run time.
- Add tests for the G, D, X and F format specifiers and for an undefined value
  (GetName returns null, ToString returns the number).
- Add the Region enum and Trip class with tests showing System.Text.Json ignores
  [EnumMember] and honours [JsonStringEnumMemberName], plus a [Description] read.
- Person uses a primary constructor.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant