C# अकादमी · पाठ

कलेक्शन बिल्डर

कस्टम प्रकारों में कलेक्शन एक्सप्रेशन का समर्थन करें।

पाठ 4, कुल 4 में से13 चरण

कलेक्शन बिल्डर, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

संग्रह अभिव्यक्तियों में कस्टम प्रकार

संग्रह अभिव्यक्तियाँ केवल अंतर्निहित प्रकारों तक सीमित नहीं हैं। [CollectionBuilder] एट्रिब्यूट के साथ आपका अपना प्रकार भी [...] वाक्य-विन्यास से बनाया जा सकता है।

CollectionBuilder एट्रिब्यूट

आप अपने संग्रह प्रकार पर [CollectionBuilder(typeof(Factory), "Create")] लागू करते हैं। यह उस स्थैतिक फ़ैक्टरी विधि का नाम बताता है जिसे कंपाइलर इंस्टेंस बनाने के लिए कॉल करता है।

बिल्डर विधि का हस्ताक्षर

बिल्डर विधि static होनी चाहिए और इसमें एकल ReadOnlySpan<T> पैरामीटर होना चाहिए तथा इसे आपका संग्रह प्रकार लौटाना चाहिए। कंपाइलर तत्वों को स्पैन के रूप में पास करता है।

एक न्यूनतम कस्टम संग्रह

यह एक छोटा अपरिवर्तनीय संग्रह है जो बिल्डर के माध्यम से संग्रह-अभिव्यक्ति निर्माण का विकल्प अपनाता है।

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;

[CollectionBuilder(typeof(IntBagBuilder), "Create")]
class IntBag : IEnumerable<int> {
    private readonly int[] items;
    public IntBag(ReadOnlySpan<int> data) => items = data.ToArray();
    public IEnumerator<int> GetEnumerator() => ((IEnumerable<int>)items).GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator() => items.GetEnumerator();
}

static class IntBagBuilder {
    public static IntBag Create(ReadOnlySpan<int> data) => new IntBag(data);
}

IntBag bag = [1, 2, 3];
foreach (int n in bag) Console.Write(n + " "); // 1 2 3
Console.WriteLine();

ReadOnlySpan क्यों

स्पैन पैरामीटर कंपाइलर को बिना किसी मध्यवर्ती आवंटन के तत्व सौंपने देता है। आपका बिल्डर उन्हें अपनी आवश्यकतानुसार किसी भी संग्रहण में कॉपी करता है।

यह IEnumerable होना चाहिए

संग्रह प्रकार को IEnumerable<T> लागू करना आवश्यक है, जहाँ T स्पैन के तत्व प्रकार से मेल खाता हो, ताकि कंपाइलर तत्व प्रकार जान सके और उपयोग की पुष्टि कर सके।

जेनेरिक बिल्डर

बिल्डर जेनेरिक हो सकते हैं और MyCollection<T> का समर्थन कर सकते हैं। बिल्डर विधि ReadOnlySpan<T> लेती है और MyCollection<T> लौटाती है।

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;

[CollectionBuilder(typeof(BoxBuilder), "Create")]
class Box<T> : IEnumerable<T> {
    private readonly T[] items;
    public Box(ReadOnlySpan<T> d) => items = d.ToArray();
    public IEnumerator<T> GetEnumerator() => ((IEnumerable<T>)items).GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator() => items.GetEnumerator();
}

static class BoxBuilder {
    public static Box<T> Create<T>(ReadOnlySpan<T> d) => new Box<T>(d);
}

Box<string> b = ["x", "y"];
foreach (var s in b) Console.Write(s + " "); // x y
Console.WriteLine();

अपरिवर्तनीय संग्रहों का लाभ

.NET के अपरिवर्तनीय संग्रह, जैसे ImmutableArray<T>, संग्रह अभिव्यक्तियों का समर्थन करने के लिए बिल्डरों का उपयोग करते हैं। बिल्डर स्पैन से स्थिर इंस्टेंस बनाता है।

using System;
using System.Collections.Immutable;

ImmutableArray<int> nums = [1, 2, 3];
Console.WriteLine(nums.Length); // 3

प्रसार भी काम करता है

किसी प्रकार में बिल्डर होने के बाद उसकी संग्रह अभिव्यक्तियों के भीतर प्रसार अपने-आप काम करता है, क्योंकि कंपाइलर अब भी तत्वों का एकल स्पैन बनाता है।

using System;
using System.Collections.Immutable;

ImmutableArray<int> a = [1, 2];
ImmutableArray<int> all = [..a, 3, 4];
Console.WriteLine(all.Length); // 4

बिल्डर कब जोड़ना चाहिए

जब आप कस्टम संग्रह उपलब्ध कराते हों और कॉल करने वालों को संक्षिप्त [...] वाक्य-विन्यास देना चाहते हों, तब [CollectionBuilder] जोड़िए, विशेष रूप से अपरिवर्तनीय या विशिष्ट कंटेनरों के लिए।

सबको साथ में समझना

बिल्डर के केवल तीन हिस्से होते हैं: एट्रिब्यूट, एक IEnumerable<T> प्रकार और एक स्थैतिक Create(ReadOnlySpan<T>) विधि। इनके साथ आपका प्रकार संग्रह-अभिव्यक्ति के प्रथम श्रेणी के लक्ष्य में बदल जाता है।

त्वरित जाँच

संग्रह बिल्डर की आवश्यकताओं की पुष्टि कीजिए।

पुनरावलोकन

आपने सीखा कि कस्टम प्रकार संग्रह अभिव्यक्तियों का समर्थन कैसे करते हैं।

  • प्रकार पर [CollectionBuilder(typeof(Factory), "Create")] लागू कीजिए।
  • फ़ैक्टरी एक static विधि है जो ReadOnlySpan<T> लेती है।
  • प्रकार को IEnumerable<T> लागू करना आवश्यक है।
  • इसी तरह ImmutableArray<T> [...] स्वीकार करता है।
शुरुआत निःशुल्क

एआई शिक्षक के साथ C# सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
93
पाठ
346

अक्सर पूछे जाने वाले प्रश्न

क्या “कलेक्शन बिल्डर” पाठ निःशुल्क है?

हाँ—“कलेक्शन बिल्डर” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“कलेक्शन बिल्डर” में मैं क्या सीखूँगा?

कस्टम प्रकारों में कलेक्शन एक्सप्रेशन का समर्थन करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“कलेक्शन बिल्डर” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. कलेक्शन एक्सप्रेशन सिंटैक्स
  2. स्प्रेड एलिमेंट
  3. कलेक्शन का लक्ष्य-प्रकार निर्धारण
  4. कलेक्शन बिल्डर
← C# अकादमी पर वापस जाएँ