RSCG – Genbox.FastEnum
 
 
| name | Genbox.FastEnum | 
| nuget | https://www.nuget.org/packages/Genbox.FastEnum/ | 
| link | https://github.com/Genbox/FastEnum | 
| author | Ian Qvist | 
Generating values for enums
This is how you can use Genbox.FastEnum .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <PropertyGroup>
		<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
		<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
	</PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Genbox.FastEnum" Version="1.0.0">
    </PackageReference>
  </ItemGroup>
</Project>
The code that you will use is
// See https://aka.ms/new-console-template for more information
using EnumDemo;
Console.WriteLine("Hello, World!");
Console.WriteLine("Car types:" + Enums.CarTypes.MemberCount);
var cars= Enums.CarTypes.GetMemberValues();
foreach (var car in cars)
{
    Console.WriteLine( car.GetString());
}
namespace EnumDemo;
[Genbox.FastEnum.FastEnum]
public enum CarTypes 
{
    None,
    Dacia ,
    Tesla ,
    BMW ,
    Mercedes ,
}
The code that is generated is
// <auto-generated />
// Generated by Genbox.FastEnum 1.0.0.0
// Generated on: 2025-08-29 11:58:11 UTC
#nullable enable
using System;
namespace EnumDemo;
[Flags]
public enum CarTypesFormat : byte
{
    None = 0,
    Name = 1,
    Value = 2,
    Default = Name | Value
}
// <auto-generated />
// Generated by Genbox.FastEnum 1.0.0.0
// Generated on: 2025-08-29 11:58:11 UTC
#nullable enable
using System;
namespace EnumDemo;
public static partial class Enums
{
    public static partial class CarTypes
    {
        public const int MemberCount = 5;
        public const bool IsFlagEnum = false;
        public static string[] GetMemberNames() => _names ??= new string[] {
                "None",
                "Dacia",
                "Tesla",
                "BMW",
                "Mercedes"
            };
        public static EnumDemo.CarTypes[] GetMemberValues() => _values ??= new EnumDemo.CarTypes[] {
                EnumDemo.CarTypes.None,
                EnumDemo.CarTypes.Dacia,
                EnumDemo.CarTypes.Tesla,
                EnumDemo.CarTypes.BMW,
                EnumDemo.CarTypes.Mercedes
            };
        public static Int32[] GetUnderlyingValues() => _underlyingValues ??= new Int32[] {
                0,
                1,
                2,
                3,
                4
            };
        public static bool TryParse(string value, out EnumDemo.CarTypes result, EnumDemo.CarTypesFormat format = EnumDemo.CarTypesFormat.Default, StringComparison comparison = StringComparison.Ordinal)
        {
            if (format.HasFlag(EnumDemo.CarTypesFormat.Name))
            {
                if (value.Equals("None", comparison))
                {
                    result = EnumDemo.CarTypes.None;
                    return true;
                }
                if (value.Equals("Dacia", comparison))
                {
                    result = EnumDemo.CarTypes.Dacia;
                    return true;
                }
                if (value.Equals("Tesla", comparison))
                {
                    result = EnumDemo.CarTypes.Tesla;
                    return true;
                }
                if (value.Equals("BMW", comparison))
                {
                    result = EnumDemo.CarTypes.BMW;
                    return true;
                }
                if (value.Equals("Mercedes", comparison))
                {
                    result = EnumDemo.CarTypes.Mercedes;
                    return true;
                }
            }
            if (format.HasFlag(EnumDemo.CarTypesFormat.Value))
            {
                if (value.Equals("0", comparison))
                {
                    result = EnumDemo.CarTypes.None;
                    return true;
                }
                if (value.Equals("1", comparison))
                {
                    result = EnumDemo.CarTypes.Dacia;
                    return true;
                }
                if (value.Equals("2", comparison))
                {
                    result = EnumDemo.CarTypes.Tesla;
                    return true;
                }
                if (value.Equals("3", comparison))
                {
                    result = EnumDemo.CarTypes.BMW;
                    return true;
                }
                if (value.Equals("4", comparison))
                {
                    result = EnumDemo.CarTypes.Mercedes;
                    return true;
                }
            }
            result = default;
            return false;
        }
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_1_OR_GREATER
        public static bool TryParse(ReadOnlySpan<char> value, out EnumDemo.CarTypes result, EnumDemo.CarTypesFormat format = EnumDemo.CarTypesFormat.Default, StringComparison comparison = StringComparison.Ordinal)
        {
            if (format.HasFlag(EnumDemo.CarTypesFormat.Name))
            {
                if (value.Equals("None", comparison))
                {
                    result = EnumDemo.CarTypes.None;
                    return true;
                }
                if (value.Equals("Dacia", comparison))
                {
                    result = EnumDemo.CarTypes.Dacia;
                    return true;
                }
                if (value.Equals("Tesla", comparison))
                {
                    result = EnumDemo.CarTypes.Tesla;
                    return true;
                }
                if (value.Equals("BMW", comparison))
                {
                    result = EnumDemo.CarTypes.BMW;
                    return true;
                }
                if (value.Equals("Mercedes", comparison))
                {
                    result = EnumDemo.CarTypes.Mercedes;
                    return true;
                }
            }
            if (format.HasFlag(EnumDemo.CarTypesFormat.Value))
            {
                if (value.Equals("0", comparison))
                {
                    result = EnumDemo.CarTypes.None;
                    return true;
                }
                if (value.Equals("1", comparison))
                {
                    result = EnumDemo.CarTypes.Dacia;
                    return true;
                }
                if (value.Equals("2", comparison))
                {
                    result = EnumDemo.CarTypes.Tesla;
                    return true;
                }
                if (value.Equals("3", comparison))
                {
                    result = EnumDemo.CarTypes.BMW;
                    return true;
                }
                if (value.Equals("4", comparison))
                {
                    result = EnumDemo.CarTypes.Mercedes;
                    return true;
                }
            }
            result = default;
            return false;
        }
        public static EnumDemo.CarTypes Parse(ReadOnlySpan<char> value, EnumDemo.CarTypesFormat format = EnumDemo.CarTypesFormat.Default, StringComparison comparison = StringComparison.Ordinal)
        {
            if (!TryParse(value, out EnumDemo.CarTypes result, format, comparison))
                throw new ArgumentOutOfRangeException($"Invalid value: {value.ToString()}");
            return result;
        }
#endif
        public static EnumDemo.CarTypes Parse(string value, EnumDemo.CarTypesFormat format = EnumDemo.CarTypesFormat.Default, StringComparison comparison = StringComparison.Ordinal)
        {
            if (!TryParse(value, out EnumDemo.CarTypes result, format, comparison))
                throw new ArgumentOutOfRangeException($"Invalid value: {value}");
            return result;
        }
        public static bool IsDefined(EnumDemo.CarTypes input)
        {
            Int32[] _isDefinedValues = GetUnderlyingValues();
            for (int i = 0; i < _isDefinedValues.Length; i++)
            {
                if (_isDefinedValues[i] == (Int32)input)
                    return true;
            }
            return false;
        }
        private static string[]? _names;
        private static EnumDemo.CarTypes[]? _values;
        private static Int32[]? _underlyingValues;
    }
}
[/code]
[code lang="csharp"]
// <auto-generated />
// Generated by Genbox.FastEnum 1.0.0.0
// Generated on: 2025-08-29 11:58:11 UTC
#nullable enable
using System;
using System.Diagnostics.CodeAnalysis;
namespace EnumDemo;
public static partial class CarTypesExtensions
{
    public static string GetString(this EnumDemo.CarTypes value) => value switch
    {
        EnumDemo.CarTypes.None => "None",
        EnumDemo.CarTypes.Dacia => "Dacia",
        EnumDemo.CarTypes.Tesla => "Tesla",
        EnumDemo.CarTypes.BMW => "BMW",
        EnumDemo.CarTypes.Mercedes => "Mercedes",
        _ => value.ToString()
    };
    public static bool TryGetUnderlyingValue(this EnumDemo.CarTypes value, out Int32 underlyingValue)
    {
        switch (value)
        {
            case EnumDemo.CarTypes.None:
                underlyingValue = 0;
                return true;
            case EnumDemo.CarTypes.Dacia:
                underlyingValue = 1;
                return true;
            case EnumDemo.CarTypes.Tesla:
                underlyingValue = 2;
                return true;
            case EnumDemo.CarTypes.BMW:
                underlyingValue = 3;
                return true;
            case EnumDemo.CarTypes.Mercedes:
                underlyingValue = 4;
                return true;
        }
        underlyingValue = default;
        return false;
    }
    public static Int32 GetUnderlyingValue(this EnumDemo.CarTypes value)
    {
        if (!TryGetUnderlyingValue(value, out Int32 underlyingValue))
            throw new ArgumentOutOfRangeException($"Invalid value: {value}");
        return underlyingValue;
    }
}
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/Genbox.FastEnum