Skip to content

Instantly share code, notes, and snippets.

@skalahonza
Created August 23, 2022 10:10
Show Gist options
  • Select an option

  • Save skalahonza/f0cfc9d044523a9d01915389afece109 to your computer and use it in GitHub Desktop.

Select an option

Save skalahonza/f0cfc9d044523a9d01915389afece109 to your computer and use it in GitHub Desktop.

Revisions

  1. skalahonza created this gist Aug 23, 2022.
    22 changes: 22 additions & 0 deletions TypeSafeEnum.cs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,22 @@
    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());
    }