SmartEnum icon indicating copy to clipboard operation
SmartEnum copied to clipboard

Support for a default enum value?

Open ChapterSevenSeeds opened this issue 2 years ago • 1 comments

@ardalis, I am wondering what your thoughts are regarding the idea of having the option of specifying a default enum value for a class inheriting from SmartEnum.

For example, let's say I have the following enum:

public class Status : SmartEnum<Status> 
{
    public static readonly Status Other = new(nameof(Pending), 0);
    public static readonly Status Pending = new(nameof(Pending), 1);
    public static readonly Status Completed = new(nameof(Completed), 2);

    private Status(string name, int value) : base(name, value) { }
}

Then, if I were to do this:

var status = Status.FromName("Cancelled");

An exception gets thrown. Instead, I would prefer to have the Other status returned if an unknown is specified in the FromName method. How would you recommend solving this? Would there be any benefit to adding a new constructor to SmartEnum that allows an enum to specify whether it is to be used as a default value?

ChapterSevenSeeds avatar Mar 25 '24 17:03 ChapterSevenSeeds

my approach is to create my own parsing method

this is my smartenum

public static readonly JobResult FAILED = new("Failed", 0);
public static readonly JobResult ABORTED = new("Aborted", 1);
public static readonly JobResult FINISHED = new("Finished", 2);
public static readonly JobResult UNKNOWN = new("Unknown", 3);

and method to parse, if not found then return UNKNOWN

public static JobResult TryParse(string? result)
{
    return TryFromName(result, out var jobResult) ? jobResult : UNKNOWN;
}

HAOYI99 avatar Nov 22 '24 01:11 HAOYI99