TaggedEnum 2.0.1

dotnet add package TaggedEnum --version 2.0.1
                    
NuGet\Install-Package TaggedEnum -Version 2.0.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="TaggedEnum" Version="2.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="TaggedEnum" Version="2.0.1" />
                    
Directory.Packages.props
<PackageReference Include="TaggedEnum" />
                    
Project file
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 TaggedEnum --version 2.0.1
                    
#r "nuget: TaggedEnum, 2.0.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 TaggedEnum@2.0.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=TaggedEnum&version=2.0.1
                    
Install as a Cake Addin
#tool nuget:?package=TaggedEnum&version=2.0.1
                    
Install as a Cake Tool

TaggedEnum

Install

$ dotnet add package TaggedEnum

Usage

using TaggedEnum;

namespace Examples;

[Tagged]
public enum Book0 {
	[Data("Computer Systems: A Programmer's Perspective")]
	CSAPP,
	[Data("Advanced Programming in the UNIX Environment")]
	APUE,
	[Data("Structure and Interpretation of Computer Programs")]
	SICP
}

Console.WriteLine("Book0");
Console.WriteLine(Book0.CSAPP.Data); // Computer Systems: A Programmer's Perspective
Console.WriteLine(Book0.APUE.Data); // Advanced Programming in the UNIX Environment
Console.WriteLine(Book0.SICP.Data); // Structure and Interpretation of Computer Programs
Console.WriteLine(Book0.CSAPP.ToStringFast()); // CSAPP
Console.WriteLine(Book0.APUE.ToStringFast()); // APUE
Console.WriteLine(Book0.SICP.ToStringFast()); // SICP

Console.WriteLine("Book0Extension");
Console.WriteLine(ExamplesBook0Extension.TryGetDataByName("CSAPP", out var v)); // true, v is Computer Systems: A Programmer's Perspective
Console.WriteLine(ExamplesBook0Extension.TryGetValueByName("CSAPP", out var vv)); // true, vv is Book0.CSAPP
Console.WriteLine(ExamplesBook0Extension.TryGetValueByData("Computer Systems: A Programmer's Perspective", out var vvv)); // CSAPP

[Tagged<int>(Inline = false)] // Inline = true, will add [MethodImpl(MethodImplOptions.AggressiveInlining)] on Data, ToStringFast(), TryGetDataByName()
public enum Book1 {
	[Data(1)]
	CSAPP,
	[Data<int>(2)]
	APUE,
	[Data(3)]
	SICP
}

Console.WriteLine("Book1");
Console.WriteLine(Book1.CSAPP.Data); // 1
Console.WriteLine(Book1.APUE.Data); // 2
Console.WriteLine(Book1.SICP.Data); // 3
Console.WriteLine(Book1.CSAPP.ToStringFast()); // CSAPP
Console.WriteLine(Book1.APUE.ToStringFast()); // APUE
Console.WriteLine(Book1.SICP.ToStringFast()); // SICP

[Tagged(UseSwitch = false)] // use switch or dictionary
public enum Book2 {
	[Data("Computer Systems: A Programmer's Perspective")]
	CSAPP,
	[Data] // Data is "APUE"
	APUE,
	[Data("Structure and Interpretation of Computer Programs")]
	SICP
}

Console.WriteLine("Book2");
Console.WriteLine(Book2.CSAPP.Data); // Computer Systems: A Programmer's Perspective
Console.WriteLine(Book2.APUE.Data); // APUE
Console.WriteLine(Book2.SICP.Data); // Structure and Interpretation of Computer Programs
Console.WriteLine(Book2.CSAPP.ToStringFast()); // CSAPP
Console.WriteLine(Book2.APUE.ToStringFast()); // APUE
Console.WriteLine(Book2.SICP.ToStringFast()); // SICP

[Tagged(UseAll = true, Inline = false, UseSwitch = false)]
public enum Book3 {
	[Data("Computer Systems: A Programmer's Perspective")]
	CSAPP,
	APUE, // Data is "APUE"
	SICP // Data is "SICP"
}

Console.WriteLine("Book3");
Console.WriteLine(Book3.CSAPP.Data); // Computer Systems: A Programmer's Perspective
Console.WriteLine(Book3.APUE.Data); // APUE
Console.WriteLine(Book3.SICP.Data); // SICP
Console.WriteLine(Book3.CSAPP.ToStringFast()); // CSAPP
Console.WriteLine(Book3.APUE.ToStringFast()); // APUE
Console.WriteLine(Book3.SICP.ToStringFast()); // SICP

// for JSON serialize deserialize
var options = new JsonSerializerOptions() {
	IncludeFields = true
};

var str = $$"""
{
	"V0": "Computer Systems: A Programmer's Perspective",
	"V1": null,
	"V2": ["Advanced Programming in the UNIX Environment", "Structure and Interpretation of Computer Programs"],
	"V3": ["Advanced Programming in the UNIX Environment", null, "Structure and Interpretation of Computer Programs"],
	"V4": ["Advanced Programming in the UNIX Environment", "Structure and Interpretation of Computer Programs"],
	"V5": ["Advanced Programming in the UNIX Environment", null, "Structure and Interpretation of Computer Programs"],
	"V6": "CSAPP",
	"V7": null,
	"V8": ["CSAPP", "SICP"],
	"V9": ["CSAPP", null, "SICP"],
	"V10": ["CSAPP", "SICP"],
	"V11": ["CSAPP", null, "SICP"]
}
""";

var obj = JsonSerializer.Deserialize<JsonTest>(str, options);
Console.WriteLine(obj.V1);

var o = new JsonTest();
var s = JsonSerializer.Serialize(o, options);
Console.WriteLine(s);

public class JsonTest {
	[JsonConverter(typeof(ExamplesBook0ToDataConverter))]
	[JsonPropertyName("V0")]
	public Book0 V0 = Book0.CSAPP;

	[JsonConverter(typeof(ExamplesBook0ToDataConverter))]
	[JsonPropertyName("V1")]
	public Book0? V1 = default;

	[JsonConverter(typeof(ExamplesBook0ArrayToDataArrayConverter))]
	[JsonPropertyName("V2")]
	public Book0[] V2 = [Book0.CSAPP, Book0.SICP];

	[JsonConverter(typeof(NullableExamplesBook0ArrayToDataArrayConverter))]
	[JsonPropertyName("V3")]
	public Book0?[] V3 = [Book0.CSAPP, null, Book0.SICP];

	[JsonConverter(typeof(ExamplesBook0EnumerableToDataEnumerableConverter))]
	[JsonPropertyName("V4")]
	public IEnumerable<Book0> V4 = [Book0.CSAPP, Book0.SICP];

	[JsonConverter(typeof(NullableExamplesBook0EnumerableToDataEnumerableConverter))]
	[JsonPropertyName("V5")]
	public IEnumerable<Book0?> V5 = [Book0.CSAPP, null, Book0.SICP];

	[JsonConverter(typeof(ExamplesBook0ToNameConverter))]
	[JsonPropertyName("V6")]
	public Book0 V6 = Book0.CSAPP;

	[JsonConverter(typeof(ExamplesBook0ToNameConverter))]
	[JsonPropertyName("V7")]
	public Book0? V7 = default;

	[JsonConverter(typeof(ExamplesBook0ArrayToNameArrayConverter))]
	[JsonPropertyName("V8")]
	public Book0[] V8 = [Book0.CSAPP, Book0.SICP];

	[JsonConverter(typeof(NullableExamplesBook0ArrayToNameArrayConverter))]
	[JsonPropertyName("V9")]
	public Book0?[] V9 = [Book0.CSAPP, null, Book0.SICP];

	[JsonConverter(typeof(ExamplesBook0EnumerableToNameEnumerableConverter))]
	[JsonPropertyName("V10")]
	public IEnumerable<Book0> V10 = [Book0.CSAPP, Book0.SICP];

	[JsonConverter(typeof(NullableExamplesBook0EnumerableToNameEnumerableConverter))]
	[JsonPropertyName("V11")]
	public IEnumerable<Book0?> V11 = [Book0.CSAPP, null, Book0.SICP];
}
There are no supported framework assets in this 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.

Version Downloads Last Updated
2.0.1 102 2/11/2026
2.0.0 97 2/10/2026
1.13.0 90 2/9/2026
1.12.0 92 2/9/2026
1.11.0 97 2/9/2026
1.10.3 99 2/9/2026
1.10.2 110 2/7/2026
1.10.1 112 2/7/2026
1.9.0 92 2/6/2026
1.5.0 219 6/17/2024
1.4.0 183 6/10/2024
1.3.0 165 6/8/2024
1.2.0 189 6/7/2024
1.1.0 162 6/7/2024
1.0.0 185 6/6/2024
0.2.1 171 6/6/2024
0.2.0 187 5/25/2024
0.1.8 170 5/14/2024
0.1.6 165 5/10/2024
0.1.5 195 5/5/2024
Loading failed