FastEnumToString 2.0.0

Suggested Alternatives

FastEnum.Extensions.Generator

dotnet add package FastEnumToString --version 2.0.0                
NuGet\Install-Package FastEnumToString -Version 2.0.0                
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="FastEnumToString" Version="2.0.0">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add FastEnumToString --version 2.0.0                
#r "nuget: FastEnumToString, 2.0.0"                
#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.
// Install FastEnumToString as a Cake Addin
#addin nuget:?package=FastEnumToString&version=2.0.0

// Install FastEnumToString as a Cake Tool
#tool nuget:?package=FastEnumToString&version=2.0.0                

FastEnumToString

Source Generator generating ToString extension methods for any enums.

Configure

Global configuration: To set the fallback behaviour if no matching value is found.

<PropertyGroup>
    <FastEnumDefaultBehaviour>Default</FastEnumDefaultBehaviour>
</PropertyGroup>

Or you can use the [ToString] attribute to override the global configuration by calling its parameterized constructor:

[ToString(ToStringDefault.First)]

Available values (for both):

  • Default: Uses the built-in Enum class behaviour and converts the provided value to its numeric representation
  • First: uses the first avalilable enum member,
  • Throw: throwing an ArgumentOutOfRangeException

*the csproj configuration is case insensitive

Example

using FastEnumToString;

using MyNamespace;

Color color = (Color)5;

Console.WriteLine(color);
Console.WriteLine(color.FastToString());
Console.WriteLine(NestingClass<int, List<int>>.NestedInClassEnum.None.FastToString());
Console.WriteLine(EnumStringConverter.FastToString(NestingClass<int, List<int>>.NestedInClassEnum.None));

namespace MyNamespace
{
    public class NestingClass<T, K>
        where T : struct
        where K : class, new()
    {
        [ToString]
        public enum NestedInClassEnum
        {
            None
        }
    }
    
    [ToString(ToStringDefault.First)]
    public enum Color
    {
        Red,
        Green,
        Blue,
    }

    // Flags are not fully supported,
    // only distinct values can be stringified
    [ToString, Flags]
    public enum Devices
    {
        Phone = 1,
        TV = 2,
        Watch = 4,
    }
}

The followning will be generated:

// <auto-generated/>

namespace FastEnumToString
{
    [global::System.CodeDom.Compiler.GeneratedCode("FastEnumToString", "2.0.0")]
    public static class EnumStringConverter
    {
        public static string FastToString<T, K>(this MyNamespace.NestingClass<T, K>.NestedInClassEnum enumValue)
            where T : struct
            where K : class, new()
        => enumValue switch
        {
            MyNamespace.NestingClass<T, K>.NestedInClassEnum.None => nameof(MyNamespace.NestingClass<T, K>.NestedInClassEnum.None),
            _ => ((int)enumValue).ToString()
        };

        public static string FastToString(this MyNamespace.Color enumValue) => enumValue switch
        {
            MyNamespace.Color.Red => nameof(MyNamespace.Color.Red),
            MyNamespace.Color.Green => nameof(MyNamespace.Color.Green),
            MyNamespace.Color.Blue => nameof(MyNamespace.Color.Blue),
            _ => nameof(MyNamespace.Color.Red)
        };

        public static string FastToString(this MyNamespace.Devices enumValue) => enumValue switch
        {
            MyNamespace.Devices.Phone => nameof(MyNamespace.Devices.Phone),
            MyNamespace.Devices.TV => nameof(MyNamespace.Devices.TV),
            MyNamespace.Devices.Watch => nameof(MyNamespace.Devices.Watch),
            _ => ((int)enumValue).ToString()
        };
    }
}
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.0 2,427 1/29/2023 2.0.0 is deprecated because it is no longer maintained.
2.0.0-beta 1,717 1/6/2023
1.2.0 1,996 3/31/2022
1.1.2 1,912 3/29/2022
1.1.1 2,042 3/28/2022
1.1.0 1,911 3/28/2022
1.0.3 1,890 1/20/2022
1.0.2.1 1,972 1/11/2022
1.0.2 2,022 1/10/2022
1.0.1 1,760 1/9/2022
1.0.0 1,691 1/4/2022

Default behaviour changed!