LayeredCraft.OptimizedEnums
1.0.0.1
See the version list below for details.
dotnet add package LayeredCraft.OptimizedEnums --version 1.0.0.1
NuGet\Install-Package LayeredCraft.OptimizedEnums -Version 1.0.0.1
<PackageReference Include="LayeredCraft.OptimizedEnums" Version="1.0.0.1" />
<PackageVersion Include="LayeredCraft.OptimizedEnums" Version="1.0.0.1" />
<PackageReference Include="LayeredCraft.OptimizedEnums" />
paket add LayeredCraft.OptimizedEnums --version 1.0.0.1
#r "nuget: LayeredCraft.OptimizedEnums, 1.0.0.1"
#:package LayeredCraft.OptimizedEnums@1.0.0.1
#addin nuget:?package=LayeredCraft.OptimizedEnums&version=1.0.0.1
#tool nuget:?package=LayeredCraft.OptimizedEnums&version=1.0.0.1
LayeredCraft.OptimizedEnums
LayeredCraft.OptimizedEnums is a modular C# .NET library providing high-performance, AOT-safe smart enum patterns using source generation. Inherit from a base class and the generator produces O(1) lookup tables, collection properties, and factory methods — all at compile time with zero reflection at runtime.
Key Features
- Zero reflection — all lookup tables are source-generated at compile time
- AOT / trimming friendly — compatible with NativeAOT, ReadyToRun, and Blazor WASM
- O(1) lookups —
FromName,FromValue,ContainsName,ContainsValue - Compile-time validation — errors for missing
partial, duplicate values/names - No allocations per call — all collections are statically cached
- Inheritance-based triggering — no attribute required, just inherit and go
📦 Packages
Usage
public sealed partial class OrderStatus : OptimizedEnum<OrderStatus, int>
{
public static readonly OrderStatus Pending = new(1, nameof(Pending));
public static readonly OrderStatus Paid = new(2, nameof(Paid));
public static readonly OrderStatus Shipped = new(3, nameof(Shipped));
private OrderStatus(int value, string name) : base(value, name) { }
}
Or use the int-defaulting convenience base class:
public sealed partial class Priority : OptimizedEnum<Priority>
{
public static readonly Priority Low = new(1, nameof(Low));
public static readonly Priority Medium = new(2, nameof(Medium));
public static readonly Priority High = new(3, nameof(High));
private Priority(int value, string name) : base(value, name) { }
}
The source generator produces:
// Lookup
var status = OrderStatus.FromName("Paid"); // OrderStatus.Paid
var status = OrderStatus.FromValue(3); // OrderStatus.Shipped
// Try-style
OrderStatus.TryFromName("Paid", out var result);
OrderStatus.TryFromValue(3, out var result);
// Membership
OrderStatus.ContainsName("Paid"); // true
OrderStatus.ContainsValue(99); // false
// Enumeration
IReadOnlyList<OrderStatus> all = OrderStatus.All;
IReadOnlyList<string> names = OrderStatus.Names;
IReadOnlyList<int> values = OrderStatus.Values;
int count = OrderStatus.Count; // compile-time constant
Performance
Benchmarks run on Apple M3 Max, .NET 9.0.8, BenchmarkDotNet v0.14.0.
| Method | Mean | Allocated |
|---|---|---|
| FromName | 5.48 ns | 0 B |
| TryFromName | 4.53 ns | 0 B |
| FromValue | 2.18 ns | 0 B |
| TryFromValue | 1.21 ns | 0 B |
| ContainsName | 4.54 ns | 0 B |
| ContainsValue | 1.18 ns | 0 B |
| GetAll | 0.76 ns | 0 B |
| GetCount | ~0 ns | 0 B |
All lookups are O(1) via statically-cached dictionaries. Count is a compile-time constant.
Installation
dotnet add package LayeredCraft.OptimizedEnums
Supports .NET 8.0, .NET 9.0, .NET 10.0.
Documentation
Full documentation is available at the LayeredCraft.OptimizedEnums docs site.
License
MIT
| 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. |
-
.NETStandard 2.0
- Scriban (>= 7.0.6)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on LayeredCraft.OptimizedEnums:
| Package | Downloads |
|---|---|
|
LayeredCraft.OptimizedEnums.SystemTextJson
System.Text.Json source-generated converters for LayeredCraft.OptimizedEnums. Decorate your OptimizedEnum class with [OptimizedEnumJsonConverter] to get a zero-reflection, AOT-safe JsonConverter stamped automatically. |
|
|
LayeredCraft.OptimizedEnums.EFCore
Entity Framework Core source-generated converters for LayeredCraft.OptimizedEnums. Decorate your OptimizedEnum class with [OptimizedEnumEfCore] to get zero-reflection, AOT-safe EF Core value converters and comparer generated automatically. |
GitHub repositories
This package is not used by any popular GitHub repositories.