मेरे पास IEnumerable<T>
(उसी के साथ T
) के दो उदाहरण हैं । मैं एक नया उदाहरण चाहता हूं, IEnumerable<T>
जिसमें दोनों की सहमति हो।
क्या ऐसा करने के लिए .Net में एक अंतर्निहित विधि है या क्या मुझे इसे स्वयं लिखना है?
मेरे पास IEnumerable<T>
(उसी के साथ T
) के दो उदाहरण हैं । मैं एक नया उदाहरण चाहता हूं, IEnumerable<T>
जिसमें दोनों की सहमति हो।
क्या ऐसा करने के लिए .Net में एक अंतर्निहित विधि है या क्या मुझे इसे स्वयं लिखना है?
जवाबों:
हाँ, वस्तुओं के लिए LINQ इस के साथ समर्थन करता है Enumerable.Concat
:
var together = first.Concat(second);
नायब: आपको अशक्त होना चाहिए first
या second
नहीं ArgumentNullException
। इससे बचने के लिए और नल का इलाज करने के लिए जैसा कि आप एक खाली सेट चाहते हैं, इस तरह अशक्त तालमेल ऑपरेटर का उपयोग करें:
var together = (first ?? Enumerable.Empty<string>()).Concat(second ?? Enumerable.Empty<string>()); //amending `<string>` to the appropriate type
using System.Linq
IDE इंटैलिसेंस में वांछित एक्सटेंशन विधि को देखने के लिए कोड फ़ाइल के शीर्ष पर नाम स्थान आयात करना आवश्यक है ।
Concat
विधि एक वस्तु जो औजार वापस आ जाएगी IEnumerable<T>
एक वस्तु लौटाएँ (यह बिल्ली कहते हैं) जिसका प्रगणक का उपयोग करने का प्रयास करेंगे दो पारित कर दिया-इन गणनीय आइटम अनुक्रम में (उन्हें ए और बी कहते हैं)। यदि पारित-किए गए एन्यूमरैबल्स अनुक्रमों का प्रतिनिधित्व करते हैं, जो बिल्ली के जीवनकाल के दौरान नहीं बदलेगा, और जिसे बिना साइड-इफेक्ट के पढ़ा जा सकता है, तो बिल्ली का सीधे उपयोग किया जा सकता है। अन्यथा, इसके परिणामस्वरूप कॉल ToList()
करने Cat
और उपयोग करने के लिए एक अच्छा विचार हो सकता है List<T>
(जो ए और बी की सामग्री के स्नैपशॉट का प्रतिनिधित्व करेगा)।
कुछ एन्यूमरैबल्स एक स्नैपशॉट लेते हैं जब एन्यूमरेशन शुरू होता है, और उस स्नैपशॉट से डेटा वापस करेगा यदि संग्रह के दौरान संग्रह को संशोधित किया गया है। यदि बी एक ऐसी गणना योग्य है, तो कैट के ए के अंत तक पहुंचने से पहले होने वाले बी में कोई भी परिवर्तन कैट की गणना में दिखाई देगा, लेकिन उसके बाद होने वाले परिवर्तन नहीं होंगे। इस तरह के शब्दार्थ की संभावना भ्रामक हो सकती है; कैट का स्नैपशॉट लेने से ऐसे मुद्दों से बचा जा सकता है।
आप अपने समाधान के लिए नीचे दिए गए कोड का उपयोग कर सकते हैं: -
public void Linq94()
{
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbersB = { 1, 3, 5, 7, 8 };
var allNumbers = numbersA.Concat(numbersB);
Console.WriteLine("All numbers from both arrays:");
foreach (var n in allNumbers)
{
Console.WriteLine(n);
}
}
// The answer that I was looking for when searching
public void Answer()
{
IEnumerable<YourClass> first = this.GetFirstIEnumerableList();
// Assign to empty list so we can use later
IEnumerable<YourClass> second = new List<YourClass>();
if (IwantToUseSecondList)
{
second = this.GetSecondIEnumerableList();
}
IEnumerable<SchemapassgruppData> concatedList = first.Concat(second);
}