c# - 有没有办法将此枚举转换为正确的类型

标签 c# enums

我有一个用户控件,它实际上是下拉列表的包装器。

我设置了这样的类型:

public Type ListType { get; set; }

然后尝试根据此类型创建下拉列表项。

这是我的第一次尝试:

    void SetOptions()
    {
        DropDownList.Items.Clear();

        var options = Enum.GetNames(ListType).ToList();

        options.ThrowNullOrEmpty("options");

        foreach (var s in options)
        {
            var e = Enum.Parse(ListType, s) as Enum;

            var item = new ListItem(e.Description(), s);

            DropDownList.Items.Add(item);
        }
    }

但是,我想知道是否可以这样做:

    void SetOptions()
    {
        DropDownList.Items.Clear();

        var options = Enum.GetValues(ListType); // need to cast this to type of ListType

        foreach (var o in options)
        {
            var item = new ListItem(o.Description(), o.ToString());

            DropDownList.Items.Add(item);
        }
    }

只是无法弄清楚如何将值列表转换为正确的枚举类型。

有什么想法吗?

最佳答案

你可以这样做:

void SetOptions()
{
    DropDownList.Items.Clear();

    var options = Enum.GetValues(ListType); // need to cast this to type of ListType

    foreach (var o in options)
    {
        var item = new ListItem(o.Description(), o.ToString());
        item.Tag = o;

        DropDownList.Items.Add(item);
    }
}

然后您可以从所选列表项的 Tag 属性中获取类型。

关于c# - 有没有办法将此枚举转换为正确的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17731058/

相关文章:

c# - 我应该在哪里启动 ASP.NET Core 中的持久后台任务?

c# - SignalR 不调用第二个集线器类

java - 字符串 switch case 标签的编译器错误

java - 以任何顺序比较值

c++ - "static enum"在 C++ 中是什么意思?

c# - 关于枚举的简单问题

c# - 如何引用 System.Web.Optimization 程序集的 1.1.0.0 版本

c# - 我可以阻止 ChromeDriver 连接某些网站吗?使用 Selenium 时

c# - 在列表框中选择一个目录并在另一个列表框中显示所选目录的文件

c++ - 或命名空间中的枚举