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

前端之家收集整理的这篇文章主要介绍了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

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

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

解决方法

有没有令人信服的理由在这里使用枚举?

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

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

猜你在找的C#相关文章