Занесение 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;
}