如何将新项插入IEnumerable

qin*_*126 10 c# asp.net-mvc ienumerable drop-down-menu

我从Enum创建了一个下拉列表.

public enum Level
{
    Beginner = 1,
    Intermediate = 2,
    Expert = 3
}
Run Code Online (Sandbox Code Playgroud)

这是我的扩展名.

    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);
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是将antoher项插入IEnumerable.我只是想不出怎么做.有人可以修改我的代码,将"--select--"插入到顶部.

Fox*_*x32 20

您无法修改IEnumerable<T>对象,它只提供枚举元素的接口.但你可以用它.ToList()来转换IEnumerable<T>成a List<T>.

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

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); 
}
Run Code Online (Sandbox Code Playgroud)