【问题标题】:How to insert new item into an IEnumerable如何将新项目插入 IEnumerable
【发布时间】:2011-08-09 15:17:59
【问题描述】:

我从 Enum 创建一个下拉列表。

public enum Level
{
    Beginner = 1,
    Intermediate = 2,
    Expert = 3
}

这是我的扩展。

    public static SelectList ToSelectList<TEnum>(this TEnum enumObj)
    {

        IEnumerable<TEnum> values = Enum.GetValues(typeof(TEnum)).Cast<TEnum>();

        var result = from TEnum e in values
                     select new { ID = (int)Enum.Parse(typeof(TEnum), e.ToString()), Name = e.ToString() };

        var tempValue = new { ID = 0, Name = "-- Select --" };


        return new SelectList(result, "Id", "Name", enumObj);
    }

我遇到的问题是将另一个项目插入 IEnumerable。我只是不知道该怎么做。有人可以修改我的代码以在顶部插入“--select--”。

【问题讨论】:

    标签: c# asp.net-mvc drop-down-menu ienumerable


    【解决方案1】:

    你不能修改IEnumerable&lt;T&gt; 对象,它只提供一个接口来枚举元素。但是您可以使用.ToList()IEnumerable&lt;T&gt; 转换为List&lt;T&gt;

    我不确定这是不是你想要的:

    public static SelectList ToSelectList<TEnum>(this TEnum enumObj)
    {
    
        IEnumerable<TEnum> values = Enum.GetValues(typeof(TEnum)).Cast<TEnum>();
    
        var result = from TEnum e in values
                     select new { ID = (int)Enum.Parse(typeof(TEnum), e.ToString()), Name = e.ToString() };
    
        var tempValue = new { ID = 0, Name = "-- Select --" };
    
        var list = result.ToList(); // Create mutable list
    
        list.Insert(0, tempValue); // Add at beginning of list
    
        return new SelectList(list, "Id", "Name", enumObj); 
    }
    

    【讨论】:

      【解决方案2】:

      您不能修改 IEnumerable。顾名思义,它允许只向前的枚举遍历。

      这似乎是一个 ASP.NET MVC 应用程序。为下拉列表实现您想要实现的目标(插入默认值)的正确方法是使用 DropDownFor 帮助器的适当重载,如下所示:

      @Html.DropDownListFor(
          x => x.SomeValue, 
          Model.SomeEnum.ToSelectList(), 
          "-- Select --"
      )
      

      这显然假设您的扩展方法很简单:

      public static SelectList ToSelectList<TEnum>(this TEnum enumObj)
      {
          var result = 
              from e in Enum.GetValues(typeof(TEnum)).Cast<TEnum>()
              select new 
              { 
                  Id = (int)Enum.Parse(typeof(TEnum), e.ToString()), 
                  Name = e.ToString() 
              };
          return new SelectList(result, "Id", "Name", enumObj);
      }
      

      【讨论】:

        【解决方案3】:

        试试这个

        public static SelectList ToSelectList<TEnum>( this TEnum enumObj )
          {
             var result = ( from TEnum e in Enum.GetValues( typeof( TEnum ) )
                            select new
                            {
                               ID = (int) Enum.Parse( typeof( TEnum ), e.ToString() ),
                               Name = e.ToString()
                            } ).ToList();
        
             result.Insert( 0, new
                               {
                                 ID = 0,
                                 Name = "-- Select --"
                                } );
        
             return new SelectList( result, "Id", "Name", enumObj );
          }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-23
          • 1970-01-01
          • 1970-01-01
          • 2015-01-29
          • 2021-10-09
          • 1970-01-01
          相关资源
          最近更新 更多