基于花药价值的动态 属性 类型 属性

Dynamic property type based on value of anther property

如何根据另一个 属性 的值最好地实现具有动态数据类型的 属性?

我有一个 class 用于 Order 具有两个属性 OrderType(枚举)和 OrderStatus(枚举)

问题是 OrderStatus 的数据类型根据值 OrderType

的不同而不同
public class Order
{
    // Enums
    public enum OrderTypes { Restaurant, Grocery, Wallet }

    public enum RestaurantOrderStatus { OrderPlaced, Pending, Preparing, ReadyForPickup OnTheWay, Cancelled }
    public enum GroceryOrderStatus { OrderPlaced, Enqueued, Preparing, OnTheWay, Cancelled, Returning }
    public enum WalletOrderStatus { OrderPlaced, OnTheWay, Cancelled }

    // Properties
    public OrderTypes OrderType { get; set; }
    public OrderStatuses OrderStatus { get; set; } // How to set a dynamic data type (different enum)?
    public int Id { get; set; }
}

执行此操作的最佳方法是什么?

我会实现一个通用类型。

public class Order<T> where T : Enum
{
    public Enums.OrderTypes OrderType { get; set; }
    public T OrderStatus { get; set; }
    public int Id { get; set; }
}

public class Enums
{
    public enum OrderTypes { Restaurant, Grocery, Wallet }

    public enum RestaurantOrderStatus { OrderPlaced, Pending, Preparing, ReadyForPickup, OnTheWay, Cancelled }
    public enum GroceryOrderStatus { OrderPlaced, Enqueued, Preparing, OnTheWay, Cancelled, Returning }
    public enum WalletOrderStatus { OrderPlaced, OnTheWay, Cancelled }
}

public class UseCase
{
    public static void UseLike()
    {
        Enums.OrderTypes orderType = Enums.OrderTypes.Grocery;

        switch (orderType)
        {
            case Enums.OrderTypes.Restaurant:
                _ = new Order<Enums.RestaurantOrderStatus>();
                break;
            case Enums.OrderTypes.Grocery:
                _ = new Order<Enums.GroceryOrderStatus>();
                break;
            case Enums.OrderTypes.Wallet:
                _ = new Order<Enums.WalletOrderStatus>();
                break;
        }

    }
}