কীভাবে দুটি আইউনামেবল <T> একটি নতুন আইনিউমেবল <টি> তে সংযুক্ত করতে?


201

আমার দুটি উদাহরণ রয়েছে IEnumerable<T>(একই সাথে T)। আমি একটি নতুন উদাহরণ চাই IEnumerable<T>যার উভয় সংক্ষিপ্তকরণ।

.নাটকটিতে কোনও বিল্ট-ইন পদ্ধতি আছে নাকি তা আমাকে নিজে লিখতে হবে?


9
আপনি বুকমার্ক করতে পারেন কোড . msdn.microsoft.com/101-LINQ- নমুনা-3fb9811b
সি-পাউন্ড গুরু 21

উত্তর:


332

হ্যাঁ, লিংক টু অবজেক্টস এর সাথে সমর্থন করে 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

1
আমি সর্বদা এক্সটেনশন পদ্ধতিগুলি অনুসন্ধান করতে ভুলে যাই, tx।
স্যামুয়েল রসিল

10
@ সামুয়েলরোসিল এছাড়াও ভুলে যাবেন না যে আপনি যে ক্রিয়াগুলি করতে চান তার নামগুলি সম্ভবত আপনার পরে কী বলা হচ্ছে তা যদি না বলা হয় তবে সম্ভবত এটি খুব কাছাকাছি। সর্বদা ইন্টেলিজেন্স ব্রাউজ করুন, আপনি অনেক কিছু শিখেন।
অ্যাডাম হল্ডসওয়ার্থ

3
দ্বিতীয় = প্রথমটি করা কি খারাপ? কনক্যাট (দ্বিতীয়)? আমাদের কোন সমঝোতা সমস্যা আছে?
ব্যবহারকারী 2934433

4
@ ব্যবহারকারী 2934433: না, ঠিক আছে ope
জন স্কিটি

2
শুধু একটি দ্রুত নোট। using System.Linq আইডিই ইন্টেলিসেন্সে কাঙ্ক্ষিত এক্সটেনশন পদ্ধতিটি দেখতে কোড ফাইলের শীর্ষে নেমস্পেস আমদানি করা প্রয়োজন ।
আরবিটি

19

Concatপদ্ধতি একটি বস্তু যা কার্যকরী ফিরে আসবে IEnumerable<T>একটি বস্তু ফিরে (এটা বিড়াল কল) যাদের গণনাকারী ব্যবহার করার প্রচেষ্টা করা হবে দুই পাশ-ইন গণনীয় আইটেম ক্রমানুসারে (তাদের A এবং B কল)। যদি পাস-ইন গুনে নম্বরগুলি ক্রমের প্রতিনিধিত্ব করে যা বিড়ালের জীবদ্দশায় পরিবর্তিত হবে না, এবং যা পার্শ্ব-প্রতিক্রিয়া ছাড়াই পাঠ করা যায়, তবে বিড়ালটি সরাসরি ব্যবহার করা যেতে পারে। অন্যথায়, এটি একটি ভাল ধারণা ডাকতে হতে পারে ToList()উপর Catএবং তার ফলে ব্যবহার List<T>(ক A এবং B বিষয়বস্তুর স্ন্যাপশট যা প্রতিনিধিত্ব হবে)।

কিছু গণনা শুরুর পরে একটি স্ন্যাপশট নেয়, এবং যদি গণনার সময় সংগ্রহটি সংশোধন করা হয় তবে সেই স্ন্যাপশট থেকে ডেটা ফেরত দেবে। বি যদি এমন একটি গণনীয় হয়, তবে বি এর কোনও পরিবর্তন যা বিড়ালের A এর শেষের আগে পৌঁছানোর আগে ঘটে তা বিড়ালের গণিতে প্রদর্শিত হবে, তবে তার পরে যে পরিবর্তনগুলি ঘটে তা তা গ্রহণ করবে না। এই জাতীয় শব্দার্থবিজ্ঞান সম্ভবত বিভ্রান্ত হতে পারে; ক্যাট এর স্ন্যাপশট নেওয়া এ জাতীয় সমস্যা এড়াতে পারে।


7

আপনার সমাধানের জন্য আপনি নীচের কোডটি ব্যবহার করতে পারেন: -

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

0
// 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);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.