作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我继承了一个 web api,它在代码中定义了很多枚举,我想将它们转换为一个名为 EnumView 的 View 模型类,以便它们可以按如下方式序列化...
{Id: value, Name: enumName}
public class EnumView
{
public int Id { get; set; }
public string Name { get; set; }
}
将通用类限制为枚举类型后,我收到警告
Constraint cannot be special class '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,
由于缺少通用枚举约束的问题,解决此问题的最佳方法是什么?
最佳答案
您可以使用:Id = Convert.ToInt32(enumValue) 而不是转换 (int)
如果您想添加一些“约束”来检查编译时的类型,您可以设置“where T : struct”,它至少会阻止设置类类型。
关于c# - 通用枚举约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32202682/
我是一名优秀的程序员,十分优秀!