2012-06-21 19 views
10

List की सीमाओं को ध्यान में रखते हुए, .Last() संग्रह को गणना करते हैं?सूची <T> है।() संग्रह संग्रह की गणना?

मैं इस पूछना क्योंकि documentation कहना है कि यह (इस स्थिति में यह हैं संग्रह की गणना करने की जरूरत है)

यह संग्रह करके बताना है तो मैं बस पिछले उपयोग कर सकते हैं Enumerable द्वारा परिभाषित किया गया है सूचकांक द्वारा तत्व (हम एक List<T> की .Count पता के रूप में), लेकिन यह यह करने के लिए है करने के लिए मूर्खतापूर्ण लगता है ....

+0

यदि आप जानते हैं कि आप एक 'सूची ', तो बस पिछले तत्व, तेजी से रास्ते का उपयोग संभव गैर प्रलेखित अनुकूलन पर निर्भर रहे बिना:

Enumerable.Last नीचे दिए तरीक़े (ILSpy) में लागू किया गया है 'अंतिम()' में। (ऐसा इसलिए होता है कि 'अंतिम() '* * यह देखने के लिए जांच करता है कि रिसीवर' IList 'लागू करता है, और उस मामले को अनुकूलित करता है।) – dlev

+0

@dlev yes, जैसा कि मैंने बताया है मुझे पता है कि मैं यह कर सकता हूं ... I मैं विशेष रूप से 'Last' – Matthew

+0

के कार्यान्वयन के बारे में पूछ रहा हूं। मुझे यकीन है कि 'सूची ' के लिए कार्यान्वयन जांच सुनिश्चित करें और यदि संभव हो तो सूचकांक द्वारा अंतिम तत्व तक पहुंचें। – Lee

उत्तर

11

यह संग्रह की गणना करता है, तो यह (किसी सरणी के साथ एक IEnumerable<T>, न कि किसी IList<T> है या सूची है सूचकांक होगा इस्तेमाल किया गया)।

public static TSource Last<TSource>(this IEnumerable<TSource> source) 
{ 
    if (source == null) 
    { 
     throw Error.ArgumentNull("source"); 
    } 
    IList<TSource> list = source as IList<TSource>; 
    if (list != null) 
    { 
     int count = list.Count; 
     if (count > 0) 
     { 
      return list[count - 1]; 
     } 
    } 
    else 
    { 
     using (IEnumerator<TSource> enumerator = source.GetEnumerator()) 
     { 
      if (enumerator.MoveNext()) 
      { 
       TSource current; 
       do 
       { 
        current = enumerator.Current; 
       } 
       while (enumerator.MoveNext()); 
       return current; 
      } 
     } 
    } 
    throw Error.NoElements(); 
} 
+0

आपके कोड प्रदान किए गए दिखाते हैं कि ** नहीं **, यह 'सूची ' की गणना का कारण नहीं बनता है ... लेकिन आपकी पहली पंक्ति "हां" कहती है ;-) – Matthew

+0

क्या आपका मतलब "नहीं" है? ऐसा लगता है कि यह मेरे लिए IList के लिए जांचता है ... – itsme86

+2

@MatthewPK यह "हां, यह पूरी गणना करने योग्य होगा अगर यह' IList '" थोड़ा उलझन में नहीं है, लेकिन सही है। – dlev

संबंधित मुद्दे