List.AddRange()
मौजूद है, लेकिन IList.AddRange()
नहीं है।
यह मुझे अजीब लगता है। इसके पीछे क्या कारण है?
List.AddRange()
मौजूद है, लेकिन IList.AddRange()
नहीं है।
यह मुझे अजीब लगता है। इसके पीछे क्या कारण है?
जवाबों:
क्योंकि एक इंटरफ़ेस को लागू करना आसान है और इसमें "सब कुछ लेकिन रसोई" शामिल नहीं है। यदि आप जोड़ते AddRange
हैं तो आपको जोड़ना चाहिए InsertRange
और RemoveRange
(समरूपता के लिए)। एक बेहतर सवाल यह होगा कि IList<T>
इंटरफ़ेस के समान इंटरफ़ेस के लिए एक्सटेंशन विधियां क्यों नहीं हैं IEnumerable<T>
। (के लिए यथा-स्थान विस्तार के तरीकों Sort
, BinarySearch
... उपयोगी होगा)
IFoo
एक "सहायक" नाम स्थान (जैसे MyAssembly
) घोषित करने के लिए ऐसा है कि यदि कोई वर्ग लागू करने का दावा करता है, IFoo
लेकिन विधि का अभाव है int Bar(String)
, तो संकलक ऑटो- जेनरेट मेथड int IFoo.Bar(String p1) {return MyAssembly.ClassHelpers.IFoo.Bar(this, p1);}
इस तरह की सुविधा मौजूद थी, इंटरफेस में अधिक तरीके शामिल हो सकते थे जैसे AddRange
कि आधार व्यवहार के संदर्भ में लागू किया जा सकता है, लेकिन कुछ कार्यान्वयन अनुपात अनुकूलन कर सकते हैं।
उन लोगों के लिए जो "AddRange", "सॉर्ट", ... के लिए एक्सटेंशन के तरीके चाहते हैं, IList पर,
नीचे AddRange
विस्तार विधि है:
public static void AddRange<T>(this IList<T> source, IEnumerable<T> newList)
{
if (source == null)
{
throw new ArgumentNullException(nameof(source));
}
if (newList == null)
{
throw new ArgumentNullException(nameof(newList));
}
if (source is List<T> concreteList)
{
concreteList.AddRange(newList);
return;
}
foreach (var element in newList)
{
source.Add(element);
}
}
मैंने एक छोटा पुस्तकालय बनाया जो ऐसा करता है। मुझे लगता है कि प्रत्येक परियोजना पर इसके विस्तार के तरीकों को फिर से करने की तुलना में यह अधिक व्यावहारिक है।
कुछ विधियाँ सूची की तुलना में धीमी हैं, लेकिन वे काम करते हैं।
यहाँ GitHub उन्हें ब्याज देने के लिए है:
AddRange/RemoveRange/InsertRange
सीधे "आंतरिक" संग्रह पर काम कर सकता है औरCapacity
प्रबंधन का उपयोग कर सकता है औरArray.Copy
डेटा के ब्लॉक के आसपास जाने के लिए तरीकों का उपयोग कर सकता है। एक विस्तार विधिRemoveRange
शायद की तुलना में धीमी magniture का आदेश होगाList.RemoveRange