CompileCorp.Vnum
1.0.0
dotnet add package CompileCorp.Vnum --version 1.0.0
NuGet\Install-Package CompileCorp.Vnum -Version 1.0.0
<PackageReference Include="CompileCorp.Vnum" Version="1.0.0" />
<PackageVersion Include="CompileCorp.Vnum" Version="1.0.0" />
<PackageReference Include="CompileCorp.Vnum" />
paket add CompileCorp.Vnum --version 1.0.0
#r "nuget: CompileCorp.Vnum, 1.0.0"
#:package CompileCorp.Vnum@1.0.0
#addin nuget:?package=CompileCorp.Vnum&version=1.0.0
#tool nuget:?package=CompileCorp.Vnum&version=1.0.0
Compile.Vnum
<img width="391" height="449" alt="image" src="https://github.com/user-attachments/assets/61f43144-b67b-4c57-b44e-e276e3c9255d" />
Installation
Package Manager
Install-Package Compile.Vnum
.NET CLI
dotnet add package Compile.Vnum
PackageReference
<PackageReference Include="Compile.Vnum" Version="1.0.0" />
Overview
Compile.Vnum provides a base class (Vnum) for creating strongly-typed, enumeration-like constructs in C#. It enables you to define types that behave like enums but support additional metadata, such as display codes, and offer advanced lookup and parsing capabilities.
This library supports .NET 9.0+ and leverages modern C# features for performance and type safety.
Purpose
- Strongly-Typed Enumerations: Define custom types that encapsulate a long integer value and a string code, similar to enums but with extensibility.
- Reflection-Based Discovery: Retrieve all instances of a Vnum type using reflection, with thread-safe caching for performance.
- Flexible Lookup: Find Vnum instances by value, code, or enum, with both strict and try-based methods.
- Type Safety: Generic support for enum-backed Vnum types via
Vnum<TEnum>. - Universal Enum Support: Supports all enum underlying types (byte, sbyte, short, ushort, int, uint, long, ulong).
- JSON Serialization: Built-in support for JSON serialization with
System.Text.Json.
Key Features
- Value and Code: Each Vnum instance has a long integer value and a string code.
- Static Lookup Methods:
GetAll<T>(): Get all instances of a Vnum type.FromValue<T>(long value): Get instance by value.FromCode<T>(string code): Get instance by code.FromEnum<TVnum, TEnum>(TEnum value): Get instance by enum value.TryFromValue,TryFromCode,TryFromEnum: Safe lookup variants.
- Equality and Hashing: Instances are compared by type and value.
- JSON Serialization: Automatic serialization to string codes and deserialization from codes or numeric values.
Usage Examples
Basic Vnum Definition
public sealed class OrderStatus : Vnum
{
public OrderStatus() { }
private OrderStatus(int value, string code) : base(value, code) { }
public static readonly OrderStatus Pending = new(1, "PENDING");
public static readonly OrderStatus Processing = new(2, "PROCESSING");
public static readonly OrderStatus Shipped = new(3, "SHIPPED");
public static readonly OrderStatus Delivered = new(4, "DELIVERED");
}
Enum-Backed Vnum
public enum StatusId
{
Pending = 1,
Processing = 2,
Shipped = 3,
Delivered = 4
}
public sealed class OrderStatus : Vnum<StatusId>
{
public OrderStatus() { }
private OrderStatus(StatusId value, string code) : base(value, code) { }
public static readonly OrderStatus Pending = new(StatusId.Pending, "PENDING");
public static readonly OrderStatus Processing = new(StatusId.Processing, "PROCESSING");
public static readonly OrderStatus Shipped = new(StatusId.Shipped, "SHIPPED");
public static readonly OrderStatus Delivered = new(StatusId.Delivered, "DELIVERED");
}
Lookup Operations
// Get all instances
var allStatuses = Vnum.GetAll<OrderStatus>();
// Find by value
var status = Vnum.FromValue<OrderStatus>(1);
// Find by code
var status = Vnum.FromCode<OrderStatus>("PENDING");
// Safe lookup
if (Vnum.TryFromValue<OrderStatus>(1, out var status))
{
// Use status
}
// Enum conversion
var status = Vnum.FromEnum<OrderStatus, StatusId>(StatusId.Pending);
JSON Serialization
// Configure JSON serialization
var options = new JsonSerializerOptions();
options.Converters.Add(new VnumJsonConverterFactory());
// Serialization
var order = new { Id = 1, Status = OrderStatus.Pending };
var json = JsonSerializer.Serialize(order, options);
// Result: {"Id":1,"Status":"PENDING"}
// Deserialization (supports both string codes and numeric values)
var json = "{\"Id\":1,\"Status\":\"PENDING\"}";
var order = JsonSerializer.Deserialize<Order>(json, options);
// Also works with numeric values for backward compatibility
var json = "{\"Id\":1,\"Status\":1}";
var order = JsonSerializer.Deserialize<Order>(json, options);
Limitations
- ULong Overflow:
ulongenum values exceedinglong.MaxValuewill throwOverflowException
Supported Frameworks
- .NET 9.0+
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. 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. |
-
net9.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on CompileCorp.Vnum:
| Package | Downloads |
|---|---|
|
Compile.Shift
A .NET library for database migration planning and execution |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 1,142 | 10/16/2025 |