【问题标题】:Enum extensions across all enums所有枚举的枚举扩展
【发布时间】:2016-08-01 07:19:40
【问题描述】:

我有一个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);
    }
}

这是我说的enum

public enum BillingInterval
{
    Monthly = 1,
    Quarterly = 2,
    Yearly = 3
}

有了这个enum 和扩展,就可以执行以下操作

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

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

现在我的模型有一个 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();
}

“状态”不包含“ToSelectList”的定义

我不太清楚为什么我的一个 enums 有扩展名,而另一个没有。

注意: 第二个枚举 StatusBillingInterval 枚举不在同一个文件中。会不会是这个问题?

【问题讨论】:

    标签: c# asp.net-mvc enums


    【解决方案1】:

    CustomerModel.BillingInterval 是一个拥有enum 值的属性。 Status 是一个类型,而不是一个实例。

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

    【讨论】:

      【解决方案2】:

      您的问题是您实际上尝试与type 交互,而不是与enum object。应该是:

      var statusEnumInstance = Status.Trial; //here your instance
      vm.StatusOptions = statusEnumInstance.ToSelectList();
      

      它在第一种情况下有效,因为您使用枚举对象引用了 CustomerModel 属性。

      【讨论】:

        猜你喜欢
        • 2012-07-09
        • 1970-01-01
        • 1970-01-01
        • 2010-12-10
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 2010-09-21
        相关资源
        最近更新 更多