gpt4 book ai didi

c# - 模拟实现接口(interface)的枚举的行为

转载 作者:可可西里 更新时间:2023-11-01 08:04:36 27 4
gpt4 key购买 nike

假设我有一个类似这样的枚举:

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 ,我想将我的枚举绑定(bind)到 SelectList使用扩展方法:

public static SelectList ToSelectList<TEnum>(this TEnum enumObj)

但是,要在 UI 下拉列表中使用 DisplayString 值,我需要按照以下行添加约束

: where TEnum has extension ToDisplayString

显然,目前的方法根本无法解决这些问题,除非有一些我不知道的巧妙技巧。

有没有人对我如何能够实现这样的事情有任何想法?

最佳答案

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

当您开始疯狂地跳来跳去使用 enum 时,可能是时候使用一个类了。

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");
}

您可以像使用 enum 一样使用它:

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# - 模拟实现接口(interface)的枚举的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3007596/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com