gpt4 book ai didi

c# - 使用 EnumToList 时如何将 转换为 Enum

转载 作者:太空宇宙 更新时间:2023-11-03 10:31:47 24 4
gpt4 key购买 nike

我有一个简单的类 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>())我得到“无法将类型 T 转换为 system.enum”。

但如果我使用 foreach (var option in EnumToList<T>())我的扩展方法无法识别。

如果我尝试投 option作为 foreach 语句之后的枚举,我得到“无法将类型 T 隐式转换为 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;
}

关于c# - 使用 EnumToList<T> 时如何将 <T> 转换为 Enum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29859326/

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