EnumStringConverter 0.1.1
dotnet add package EnumStringConverter --version 0.1.1
NuGet\Install-Package EnumStringConverter -Version 0.1.1
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.1"> <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.1" />
<PackageReference Include="EnumStringConverter"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
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.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: EnumStringConverter, 0.1.1"
#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.1
#: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.1
#tool nuget:?package=EnumStringConverter&version=0.1.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
EnumStringConverter
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()andGetNames()returnReadOnlySpan<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 stringParse(string value): Convert string to enum value (throws on failure)TryParse(string value, out T result): Safely convert string to enum valueIsDefined(T value): Check if enum value is definedGetValues(): Get all enum values asReadOnlySpan<T>GetNames(): Get all enum names asReadOnlySpan<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
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
Compatible target framework(s)
Included target framework(s) (in 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.