如何根據另一個屬性的值最好地實作具有動態資料型別的屬性?
我有一個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; }
}
做到這一點的最佳方法是什么?
使用通用型別?
使用建造者模式?
uj5u.com熱心網友回復:
我會實作一個通用型別。
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;
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/428080.html
