fea*_*net 13 c# extension-methods enums interface
说我有一个类似的枚举:
enum OrderStatus
{
AwaitingAuthorization,
InProduction,
AwaitingDespatch
}
Run Code Online (Sandbox Code Playgroud)
我还在我的枚举上创建了一个扩展方法来整理UI中的显示值,所以我有类似的东西:
public static string ToDisplayString(this OrderStatus status)
{
switch (status)
{
case Status.AwaitingAuthorization:
return "Awaiting Authorization";
case Status.InProduction:
return "Item in Production";
... etc
}
}
Run Code Online (Sandbox Code Playgroud)
灵感来自这里的优秀帖子,我想SelectList
用扩展方法将我的枚举绑定到一个:
public static SelectList ToSelectList<TEnum>(this TEnum enumObj)
但是,要在UI下拉列表中使用DisplayString值,我需要添加一个约束
: where TEnum has extension ToDisplayString
显然,除非有一些我不知道的聪明伎俩,否则这一切都不会对当前的方法起作用.
有没有人对我如何能够实现这样的事情有任何想法?
Jay*_*Jay 27
有没有令人信服的理由在enum
这里使用?
当你开始跳过疯狂的箍来使用enum
s时,可能是时候使用一个类了.
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");
}
Run Code Online (Sandbox Code Playgroud)
您使用它与以下相同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);
}
Run Code Online (Sandbox Code Playgroud)
字符串表示是内置的,您只需要ToString()
.
归档时间: |
|
查看次数: |
9036 次 |
最近记录: |