C# · 12月 31, 2021

c# – 模拟实现接口的枚举的行为

说我有一个枚举如下: 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

显然这一切都不会用现在的方法,除非有一些聪明的把戏,我不知道.

有人有什么想法可以如何实现这样的事情吗?

@H_419_20@解决方法 有没有令人信服的理由在这里使用枚举?

当您开始跳过疯狂的环使用枚举时,可能是使用课程的时候了.

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().

@H_419_20@ @H_419_20@