【发布时间】:2013-06-02 08:53:58
【问题描述】:
我有一个看起来像这样的小方法:
public void SetOptions<T>() where T : Enum
{
int i = 0;
foreach (T obj in Enum.GetValues(typeof(T)))
{
if (i == 0)
DefaultOption = new ListItem(obj.Description(), obj.ToString());
i++;
DropDownList.Items.Add(new ListItem(obj.Description(), obj.ToString()));
}
}
基本上,我从一个枚举中填充一个下拉列表。 Description()实际上是枚举的扩展方法,所以T绝对是enum。
但是,我想将 obj 转换为像 (int)obj 这样的任何枚举到它的索引,但我收到一个错误,说我无法将 T 转换为 int。有没有办法做到这一点?
【问题讨论】:
-
enum不能是通用约束的一部分。 -
您到底想要完成什么?使用枚举类型的值填充下拉列表的值?
-
我有许多子用户控件,它们都需要填充基本下拉列表。下拉列表位于基本用户控件上。以前,列表是在每个子控件中构建的,然后传递给基本用户控件,因此不需要泛型。但是希望只传递枚举类型并让基本控件完成其余的工作。
-
enum随着 Visual Studio v15.7 和 C# 7.3 的发布,自 2018 年 5 月 7 日起,可以成为泛型类型约束的一部分。 stackoverflow.com/a/28527552/88409不过,这个演员阵容可能还是不行,哈哈。