使用 EnumToList<T> 时如何将 <T> 转换为 Enum
How can I cast <T> as Enum when using EnumToList<T>
我有一个简单的 class SelectItemOption
,通常用于下拉菜单、列表等。
public class SelectItemOption
{
public string Title { get; set; }
public string ID { get; set; }
public string Description { get; set; }
}
我想创建一个方法,用枚举中的值填充 List<SelectItemOption>
。 GetDisplayName()
和 GetDisplayDescription()
从属性中获取此信息。
我从 another SO answer 中窃取了一些代码,以将枚举值放入可枚举对象中。
public static IEnumerable<T> EnumToList<T>()
where T : struct
{
return Enum.GetValues(typeof(T)).Cast<T>();
}
我试图像这样把它们放在一起:
public static List<SelectItemOption> EnumAsSelectItemOptions<T>()
where T : struct
{
var optionsList = new List<SelectItemOption>();
foreach (var option in EnumToList<T>()) //** headache here **
{
optionsList.Add(new SelectItemOption()
{
Title = option.GetDisplayName(),
ID = option.ToString(),
Description = option.GetDisplayDescription()
});
}
return optionsList;
}
当我尝试迭代 EnumToList 时出现问题。
无论我怎么尝试,我似乎都无法让 option
变量像枚举一样工作。
我试过了...
如果我使用 foreach (Enum option in EnumToList<T>())
,我会得到 "cannot convert type T to system.enum"。
但是,如果我使用 foreach (var option in EnumToList<T>())
,我的扩展方法将无法识别。
如果我尝试在 foreach 语句后将 option
转换为枚举,我会得到 "cannot implicitly convert type T to system.enum"。
啊啊啊啊啊啊!
您不能限制为 Enum
,因此 option
只能是 struct
。但是,您可以尝试像这样编写 EnumAsSelectItemOptions
方法:
public static List<SelectItemOption> EnumAsSelectItemOptions<T>()
where T : struct
{
var optionsList = new List<SelectItemOption>();
foreach (var option in EnumToList<T>()) //** headache here **
{
optionsList.Add(new SelectItemOption()
{
Title = option is Enum
? (option as Enum).GetDisplayName()
: option.ToString(),
ID = option.ToString(),
Description = option is Enum
? (option as Enum).GetDisplayDescription()
: option.ToString(),
});
}
return optionsList;
}
我有一个简单的 class SelectItemOption
,通常用于下拉菜单、列表等。
public class SelectItemOption
{
public string Title { get; set; }
public string ID { get; set; }
public string Description { get; set; }
}
我想创建一个方法,用枚举中的值填充 List<SelectItemOption>
。 GetDisplayName()
和 GetDisplayDescription()
从属性中获取此信息。
我从 another SO answer 中窃取了一些代码,以将枚举值放入可枚举对象中。
public static IEnumerable<T> EnumToList<T>()
where T : struct
{
return Enum.GetValues(typeof(T)).Cast<T>();
}
我试图像这样把它们放在一起:
public static List<SelectItemOption> EnumAsSelectItemOptions<T>()
where T : struct
{
var optionsList = new List<SelectItemOption>();
foreach (var option in EnumToList<T>()) //** headache here **
{
optionsList.Add(new SelectItemOption()
{
Title = option.GetDisplayName(),
ID = option.ToString(),
Description = option.GetDisplayDescription()
});
}
return optionsList;
}
当我尝试迭代 EnumToList 时出现问题。
无论我怎么尝试,我似乎都无法让 option
变量像枚举一样工作。
我试过了...
如果我使用 foreach (Enum option in EnumToList<T>())
,我会得到 "cannot convert type T to system.enum"。
但是,如果我使用 foreach (var option in EnumToList<T>())
,我的扩展方法将无法识别。
如果我尝试在 foreach 语句后将 option
转换为枚举,我会得到 "cannot implicitly convert type T to system.enum"。
啊啊啊啊啊啊!
您不能限制为 Enum
,因此 option
只能是 struct
。但是,您可以尝试像这样编写 EnumAsSelectItemOptions
方法:
public static List<SelectItemOption> EnumAsSelectItemOptions<T>()
where T : struct
{
var optionsList = new List<SelectItemOption>();
foreach (var option in EnumToList<T>()) //** headache here **
{
optionsList.Add(new SelectItemOption()
{
Title = option is Enum
? (option as Enum).GetDisplayName()
: option.ToString(),
ID = option.ToString(),
Description = option is Enum
? (option as Enum).GetDisplayDescription()
: option.ToString(),
});
}
return optionsList;
}