EnumStringConverter 0.1.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package EnumStringConverter --version 0.1.0
                    
NuGet\Install-Package EnumStringConverter -Version 0.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EnumStringConverter" Version="0.1.0">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EnumStringConverter" Version="0.1.0" />
                    
Directory.Packages.props
<PackageReference Include="EnumStringConverter">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add EnumStringConverter --version 0.1.0
                    
#r "nuget: EnumStringConverter, 0.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package EnumStringConverter@0.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=EnumStringConverter&version=0.1.0
                    
Install as a Cake Addin
#tool nuget:?package=EnumStringConverter&version=0.1.0
                    
Install as a Cake Tool

EnumStringConverter

NuGet License: MIT

A C# source generator that provides fast enum-to-string conversion and enumeration with support for naming convention transformations.

日本語版

Features

  • High Performance: Uses static dispatch with switch expressions instead of reflection
  • Naming Convention Support: Convert between 14 different naming conventions (PascalCase, camelCase, snake_case, etc.)
  • Zero Allocation: GetValues() and GetNames() return ReadOnlySpan<T>
  • Flexible Usage: Apply attributes directly to enums or use partial classes

Installation

dotnet add package EnumStringConverter

Quick Start

Apply Attribute Directly to Enum

using EnumStringConverter;

[GenerateEnumStringConverter]
public enum MyEnum
{
    None,
    First,
    Second
}

// Usage
var myEnum = MyEnum.First;
string name = MyEnumConverter.GetName(myEnum); // "First"

var parsed = MyEnumConverter.Parse("Second"); // MyEnum.Second

if (MyEnumConverter.TryParse("Third", out MyEnum result))
{
    Console.WriteLine(result);
}

// Enumerate values
foreach (var value in MyEnumConverter.GetValues())
{
    Console.WriteLine(value);
}

Using Partial Class

public enum MyEnum
{
    None,
    First,
    Second
}

[GenerateEnumStringConverter(typeof(MyEnum))]
public static partial class MyEnumConverter
{
}

// Same usage
string name = MyEnumConverter.GetName(MyEnum.First);

Naming Convention Conversion

Use From and To properties to convert between different naming conventions.

Convert to snake_case

[GenerateEnumStringConverter(To = NamingCase.SnakeCase)]
public enum MyEnum
{
    FirstValue,   // "first_value"
    SecondValue,  // "second_value"
    ThirdValue    // "third_value"
}

var value = MyEnum.FirstValue;
string name = MyEnumConverter.GetName(value); // "first_value"
var parsed = MyEnumConverter.Parse("second_value"); // MyEnum.SecondValue

Convert to kebab-case

[GenerateEnumStringConverter(To = NamingCase.KebabCase)]
public enum StatusCode
{
    NotFound,           // "not-found"
    InternalServerError // "internal-server-error"
}

Convert to camelCase

[GenerateEnumStringConverter(To = NamingCase.CamelCase)]
public enum MyEnum
{
    FirstValue,   // "firstValue"
    SecondValue   // "secondValue"
}

Supported Naming Conventions

Convention Example
PascalCase MyVariable
CamelCase myVariable
SnakeCase my_variable
UpperSnakeCase MY_VARIABLE
PascalSnakeCase My_Variable
KebabCase my-variable
CobolCase MY-VARIABLE
TrainCase My-Variable
DotCase my.variable
PathCase my/variable
LowerCase my variable
UpperCase MY VARIABLE
TitleCase My Variable
SentenceCase My variable

Custom From Parameter

By default, enum names are treated as PascalCase. To convert from a different convention, specify the From parameter.

// Convert from snake_case to kebab-case
[GenerateEnumStringConverter(From = NamingCase.SnakeCase, To = NamingCase.KebabCase)]
public enum MyEnum
{
    first_value,   // "first-value"
    second_value   // "second-value"
}

Generated Methods

The following methods are generated for each enum:

  • GetName(T value): Convert enum value to string
  • Parse(string value): Convert string to enum value (throws on failure)
  • TryParse(string value, out T result): Safely convert string to enum value
  • IsDefined(T value): Check if enum value is defined
  • GetValues(): Get all enum values as ReadOnlySpan<T>
  • GetNames(): Get all enum names as ReadOnlySpan<string>

Performance

  • GetName(): Fast static dispatch using switch expressions
  • Parse()/TryParse(): Fast static dispatch using switch statements
  • GetValues()/GetNames(): Zero allocation by returning spans directly
  • Naming Convention Conversion: Performed at compile time with zero runtime overhead

License

MIT License

Repository

https://github.com/gameshalico/EnumStringConverter

There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

  • .NETStandard 2.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.1 90 1/8/2026
0.1.0 78 1/7/2026