所有枚举中的枚举扩展

Det*_*ium 2 c# asp.net-mvc enums

我有enum以下扩展名:

public static class EnumExtension
{
    public static SelectList ToSelectList(this Enum en)
    {
        var list = (from Enum d in Enum.GetValues(en.GetType())
                select new SelectListItem { Value = d.ToString(("d")), Text = Enum.GetName(en.GetType(), d) }).ToList();

        var selectedValue = (int) Enum.Parse(en.GetType(), Enum.GetName(en.GetType(), en));

        return new SelectList(list, "Value", "Text", selectedValue);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是enum我在说的:

public enum BillingInterval
{
    Monthly = 1,
    Quarterly = 2,
    Yearly = 3
}
Run Code Online (Sandbox Code Playgroud)

有了这个enum和扩展,就可以做到以下几点

public ActionResult Test()
{
    var vm = new CustomerViewModel();

    vm.BillingIntervalOptions = CustomerModel.BillingInterval.ToSelectList();
}
Run Code Online (Sandbox Code Playgroud)

现在我的模型SelectList包含了我的值enum

问题

我刚刚创建了另一个enum,我想这enum会有相同的扩展名,但是当我尝试以下内容时,我得到一个编译错误:

public enum Status
{
    Trial = 1,
    Demo = 2,
    Setup = 3,
    Production = 4
}

public ActionResult Test()
{
    var vm = new CustomerViewModel();

    vm.BillingIntervalOptions = CustomerModel.BillingInterval.ToSelectList();

    //This gives me a compile error
    vm.StatusOptions = Status.ToSelectList();
}
Run Code Online (Sandbox Code Playgroud)

"状态"不包含"ToSelectList"的定义

我不太确定为什么我的一个enums有扩展但另一个没有.

注意: 第二个枚举与枚举Status不在同一个文件中BillingInterval.这可能是问题吗?

Pat*_*man 5

CustomerModel.BillingInterval是一个拥有价值的财产enum.Status是一种类型,而不是一个实例.

由于扩展方法仅适用于实例而不适用于类型,因此第二个语句失败.