Skip to content

Instantly share code, notes, and snippets.

@skalahonza
Created August 23, 2022 10:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save skalahonza/f0cfc9d044523a9d01915389afece109 to your computer and use it in GitHub Desktop.
Save skalahonza/f0cfc9d044523a9d01915389afece109 to your computer and use it in GitHub Desktop.
Type safe enum that uses normal enum values for the underlying storage. Enhancment of Ardalis.SmartEnum.SmartEnum.
using Ardalis.SmartEnum;
/// <summary>
/// Type safe enum that uses normal enum values for the underlying storage.
/// Enhancment of Ardalis.SmartEnum.SmartEnum
/// </summary>
/// <typeparam name="TEnum">The type that is inheriting from this class.</typeparam>
/// <typeparam name="TDiscriminator">Enum used as discriminator</typeparam>
public abstract class TypeSafeEnum<TEnum, TDiscriminator> : SmartEnum<TEnum>
where TEnum : SmartEnum<TEnum, int>
where TDiscriminator : struct, Enum
{
protected TypeSafeEnum(TDiscriminator discriminator) : base(discriminator.ToString(), (int)(object)discriminator)
{
Discriminator = discriminator;
}
public TDiscriminator Discriminator { get; }
public static TEnum FromDiscriminator(TDiscriminator type) =>
FromName(type.ToString());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment