Meziantou.Framework.FastEnumGenerator
2.0.11
Prefix Reserved
dotnet add package Meziantou.Framework.FastEnumGenerator --version 2.0.11
NuGet\Install-Package Meziantou.Framework.FastEnumGenerator -Version 2.0.11
<PackageReference Include="Meziantou.Framework.FastEnumGenerator" Version="2.0.11" />
<PackageVersion Include="Meziantou.Framework.FastEnumGenerator" Version="2.0.11" />
<PackageReference Include="Meziantou.Framework.FastEnumGenerator" />
paket add Meziantou.Framework.FastEnumGenerator --version 2.0.11
#r "nuget: Meziantou.Framework.FastEnumGenerator, 2.0.11"
#:package Meziantou.Framework.FastEnumGenerator@2.0.11
#addin nuget:?package=Meziantou.Framework.FastEnumGenerator&version=2.0.11
#tool nuget:?package=Meziantou.Framework.FastEnumGenerator&version=2.0.11
Meziantou.Framework.FastEnumGenerator
The source generator generates specialized enum helpers for selected enum types.
[assembly: FastEnumAttribute(typeof(Sample.Color), IsPublic = true, ExtensionMethodNamespace = "Sample.Extensions")]
namespace Sample
{
public enum Color
{
Blue,
Red,
Green,
}
}
Generated methods
For each configured enum, the generator emits these instance extension methods:
string ToStringFast(this TEnum value)string ToStringFast(this TEnum value, bool useMetadata)bool HasFlag(this TEnum instance, TEnum flag)string GetName(this TEnum instance)
Method behavior:
ToStringFastreturns the declared enum name without using reflection.ToStringFast(..., useMetadata: true)uses metadata names when available.GetNameis the non-metadata version ofToStringFast.HasFlaguses typed bitwise operations ((instance & flag) == flag).
When the target project supports C# 14 extension members, the generator also emits static members on extension(TEnum):
TEnum Parse(string value, bool ignoreCase)TEnum Parse(ReadOnlySpan<char> value, bool ignoreCase)TEnum Parse(string value, bool ignoreCase, bool useMetadata)TEnum Parse(ReadOnlySpan<char> value, bool ignoreCase, bool useMetadata)bool TryParse(string value, bool ignoreCase, out TEnum result)bool TryParse(ReadOnlySpan<char> value, bool ignoreCase, out TEnum result)bool TryParse(string value, bool ignoreCase, bool useMetadata, out TEnum result)bool TryParse(ReadOnlySpan<char> value, bool ignoreCase, bool useMetadata, out TEnum result)bool IsDefined(TEnum value)ReadOnlySpan<string> GetNames(bool useMetadata)ReadOnlySpan<TEnum> GetValues()
Analyzer rules
The package also ships analyzers and code fixes for enums configured with FastEnumAttribute.
MFEG0001: invalidFastEnumAttributeenum typeMFEG0002: useTEnum.Parse(...)instead ofEnum.Parse(...)MFEG0003: useTEnum.TryParse(...)instead ofEnum.TryParse(...)MFEG0004: useTEnum.GetNames(useMetadata: false)instead ofEnum.GetNames(...)MFEG0005: useTEnum.GetValues()instead ofEnum.GetValues(...)MFEG0006: usevalue.GetName()instead ofEnum.GetName(...)MFEG0007: useTEnum.IsDefined(...)instead ofEnum.IsDefined(...)MFEG0008: usevalue.ToStringFast()instead ofvalue.ToString()
Metadata names
useMetadata uses names from:
DisplayAttribute.NameDisplayNameAttribute.DisplayNameEnumMemberAttribute.Value
When metadata is not available for a member, the declared enum name is used.
Additional resources
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- No dependencies.
-
net10.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.