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