说我有一个枚举如下:
enum OrderStatus { AwaitingAuthorization,InProduction,AwaitingDespatch }
我还在我的枚举上创建了一个扩展方法来整理UI中显示的值,所以我有一些类似于
public static string ToDisplayString(this OrderStatus status) { switch (status) { case Status.AwaitingAuthorization: return "Awaiting Authorization"; case Status.InProduction: return "Item in Production"; ... etc } }
灵感来自于优秀的帖子here,我想使用扩展方法将我的枚举绑定到一个SelectList:
public static SelectList ToSelectList< TEnum>(this TEnum enumObj)
然而,要在UI下拉菜单中使用DisplayString值,我需要添加一条约束
:其中TEnum有扩展ToDisplayString
显然这一切都不会用现在的方法,除非有一些聪明的把戏,我不知道.
有人有什么想法可以如何实现这样的事情吗?
解决方法
有没有令人信服的理由在这里使用枚举?
当您开始跳过疯狂的环使用枚举时,可能是使用课程的时候了.
public class OrderStatus { OrderStatus(string display) { this.display = display; } string display; public override string ToString(){ return display; } public static readonly OrderStatus AwaitingAuthorization = new OrderStatus("Awaiting Authorization"); public static readonly OrderStatus InProduction = new OrderStatus("Item in Production"); public static readonly OrderStatus AwaitingDispatch = new OrderStatus("Awaiting Dispatch"); }
你的消费与一个枚举一样:
public void AuthorizeAndSendToProduction(Order order,ProductionQueue queue) { if(order.Status != OrderStatus.AwaitingAuthorization) { Console.WriteLine("This order is not awaiting authorization!"); return; } order.Status = OrderStatus.InProduction; queue.Enqueue(order); }
字符串表示是内置的,所有你需要的是ToString().