2011-08-09 14 views
10

मैं Enum से एक dropdownlist बनाने में नया आइटम सम्मिलित करने के लिए।कैसे एक IEnumerable

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); 
    } 

आईएनमेर्यूमेबल में एंटोयर आइटम डालने के लिए मेरी समस्या है। मैं तो बस यह कैसे करना है यह पता लगाने नहीं कर सका। किसी शीर्ष करने के लिए सम्मिलित करने के लिए "--चुनें--" मेरे कोड को संशोधित कृपया कर सकते हैं।

उत्तर

18

आप IEnumerable<T> ऑब्जेक्ट को संशोधित नहीं कर सकते हैं, यह केवल तत्वों को गणना करने के लिए एक इंटरफ़ेस प्रदान करता है। लेकिन तुम .ToList() का प्रयोग कर एक List<T> को IEnumerable<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); 
} 
+0

यह काम करता है यह एक कोशिश है, तो आप बहुत बहुत धन्यवाद। – qinking126

3

आप एक 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); 
} 
1

दें

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); 
    } 
संबंधित मुद्दे