Занесение value из Attribute в переменную типа enum

Всем привет. Пытаюсь внести value из enum member в свою переменную типа Enum. Правильно понимаю, что "In-House" не может быть внесено в качестве переменной или можно как-то привести??

public class ReservationCard
{      
    public ReservationStatus ReservationStatus { get; set; } 
}

//

public enum ReservationStatus
{
    [EnumMember(Value = "In-House")]
    InHouse = 1,
}

//

private static readonly ReservationCard ReservationCard = new ReservationCard
{
    ReservationStatus = ReservationStatus.InHouse  // now it's 1. Should be - "In-House"
}

Ответы (1 шт):

Автор решения: return
using System.Reflection;
public static class ReservationStatusExtensions
{
    public static string GetString(this ReservationStatus @this) => 
        typeof(ReservationStatus).GetField(@this.ToString())
        .GetCustomAttribute<EnumMemberAttribute>().Value;
}
static readonly ReservationCard ReservationCard = new ReservationCard
{
    ReservationStatus = ReservationStatus.InHouse.GetString()
}

Валидация отсутствует.

Результат ReservationStatus.InHouse.ToString() обязан быть "InHouse", т.к. в таком случае мы можем по имени поля получить информацию о нём. Если вы не хотите использовать медленный Enum.ToString, то можете передавать сразу имя поля (предварительно нужно изменить реализацию ReservationStatusExtensions.GetString), т.е.

static readonly ReservationCard ReservationCard = new ReservationCard
{
    ReservationStatus = ReservationStatusExtensions.GetString("InHouse")
}

...или сделать вот так:

using System.Collections.Generic;

public static class ReservationStatusExtensions
{
    static readonly Dictionary<ReservationStatus, FieldInfo> fields = new() {
        [ReservationStatus.InHouse] = typeof(ReservationStatus).GetField("InHouse")
        // ...
    };

    public static string GetString(this ReservationStatus @this) => 
        fields[@this].GetCustomAttribute<EnumMemberAttribute>().Value;
}
→ Ссылка