【发布时间】:2015-08-25 11:19:55
【问题描述】:
我继承了一个 web api,它在代码中定义了很多枚举,我想将它们转换为一个名为 EnumView 的视图模型类,以便它们可以按如下方式序列化...
{Id:值,名称:enumName}
public class EnumView
{
public int Id { get; set; }
public string Name { get; set; }
}
在将 Generic 类限制为枚举类型时,我收到警告
约束不能是特殊类'System.Enum'
这是我要使用的通用转换器...
public class EnumViewConverter<T> where T : Enum
{
public static List<EnumView> ConvertToView()
{
List<EnumView> enumViews = new List<EnumView>();
T[] enumValues = (T[])Enum.GetValues(typeof(T));
foreach (var enumValue in enumValues)
{
var enumView = new EnumView
{
Id = (int)enumValue,
Name = Enum.GetName(typeof(T), enumValue)
};
enumViews.Add(enumView);
}
return enumViews;
}
}
如果没有将 T 限制为枚举,则以下转换不会编译...
Id = (int)enumValue,
由于缺乏通用枚举约束的问题,解决此问题的最佳方法是什么?
【问题讨论】:
-
好的,你已经定义了一个枚举,但是你将如何使用它呢?通过回答这个问题,我们可以找出转换的目的,然后我们可能会想出一个解决方案
-
@leppie - 我在发帖之前已经阅读了那个问题/答案,但觉得它并没有真正回答我的问题。
-
@Hamed 不太确定你在追求什么 - EnumView 将在 API 中序列化。枚举用于服务器端代码...
-
实际上
(int)enumValue不编译我猜。因为不能保证enumValue必须是int。顺便说一句,Enum也是可序列化的。 -
@AmitKumarGhosh 是的,如果我使用 where T: struct 例如,类型 T 不能保证是枚举。我想创建枚举的所有值的列表并在 API 中返回它,而不仅仅是序列化单个枚举值。