दिलचस्प पोस्ट
एक asp.net MVC नियंत्रक एक छवि वापस कर सकते हैं? रेगेक्स स्प्लिट स्ट्रिंग लेकिन अलग-अलग रखिए एक लैम्ब्डा अभिव्यक्ति में एक अनूठा _पीटीआर कैद कैसे करें? mySQL तिथि करने के लिए varchar कन्वर्ट mysql संग्रहीत कार्यविधि जो स्वयं को फिर से कॉल करती है ब्राउजर इवेंट जब डाउनलोड की गई फ़ाइल को डिस्क पर सहेजा जाता है आईफोन में एएलएसएसट से प्राप्त URL से छवि प्रदर्शित करें एमएस एक्सेस (एमडीबी) संगामिति आईओएस 7 टेक्स्टकिट – छवि के साथ इनलाइन को कैसे सम्मिलित करें? एसक्यूएल सर्वर sp_msforeachtable उपयोग केवल उन तालिकाओं का चयन करने के लिए जो कुछ स्थिति से मेल खाते हैं जावा में अपने इंटरफेस नाम के साथ चर क्यों घोषित किए गए हैं? Enum विशेषता से enum प्राप्त करें क्या iOS 7 प्रोग्राम में नियंत्रण केंद्र को अक्षम करना संभव है और यदि नहीं, तो विकल्प क्या हैं? जावा में IPv4 पता मान्य करें एक पंक्ति में कई बयानों को कैसे रखा जाए?

VB.NET में यील्ड

सी # में उपज कहा जाता है VB.NET इस कीवर्ड का अभाव है इस कीवर्ड की कमी के आस-पास विज़ुअल बेसिक प्रोग्रामर को कैसे मिला? क्या वे लागू करते हैं वे खुदरा वर्ग का मालिक हैं? या क्या वे कोशिश करते हैं और कोड की आवश्यकता से बचने के लिए एक iterator?

उपज कीवर्ड कंपाइलर को पर्दे के पीछे कुछ कोडिंग करने के लिए मजबूर करता है सी # और इसके परिणाम (भाग 1) में आईटरेटर के कार्यान्वयन में इसका एक अच्छा उदाहरण है।

वेब के समाधान से एकत्रित समाधान "VB.NET में यील्ड"

नोट: यह उत्तर पुराना है। Iterator ब्लॉक VB.NET में जोड़ा गया है

सी # कम्पाइल समय पर एक राज्य मशीन में उपज कीवर्ड का अनुवाद करता है। VB.NET के पास उपज कीवर्ड नहीं है, लेकिन इसके पास एक फ़ंक्शन के अंदर सुरक्षित रूप से एम्बेडेड स्टेट के लिए अपनी स्वयं की व्यवस्था है जो कि सी # में आसानी से उपलब्ध नहीं है।

सी # static कीवर्ड को सामान्यतः Shared कुंजीशब्द का उपयोग करके विज़ुअल बेसिक में अनुवाद किया जाता है, लेकिन दो जगहें होती हैं जहां चीजें भ्रमित हो जाती हैं एक यह है कि सी # स्टैटिक क्लास वास्तव में एक साझा क्लास के बजाय विज़ुअल बेसिक में एक मॉड्यूल है (आपको लगता है कि वे आपको इसे विज़ुअल बेसिक में किसी भी तरह से कोड देते हैं, लेकिन नोहू)। दूसरा यह है कि VB.NET के पास अपना Static कीवर्ड है। हालांकि, Static का VB.NET में एक अलग अर्थ है।

आप फ़ंक्शन के भीतर एक चर को घोषित करने के लिए VB.NET में Static कीवर्ड का उपयोग करते हैं, और जब आप चर करते हैं, तो फ़ंक्शन कॉल में इसकी स्थिति बनाए रखता है। यह सिर्फ सी # में एक निजी स्टेटिक क्लास सदस्य को घोषित करने के अलावा अलग है, क्योंकि VB.NET के एक स्थिर फ़ंक्शन सदस्य को भी थ्रेड-सुरक्षित होने की गारंटी है, क्योंकि कंपाइलर इसे समय के संकलन पर मॉनिटर वर्ग का उपयोग करने के लिए अनुवादित करता है।

तो ये सब यहाँ क्यों लिखते हैं? ठीक है, VB.NET में पुन: प्रयोज्य जेनेरिक Iterator<T> वर्ग (या Iterator(Of T) का निर्माण करना संभव है। इस वर्ग में आप सी # द्वारा उपयोग की जाने वाली राज्य मशीन को लागू करेंगे, Yield() और Break() विधियों के साथ सी # कीवर्ड के अनुरूप होंगे। तो फिर आप एक समारोह में एक स्थिर उदाहरण (वीबी.नेट अर्थ में) का उपयोग कर सकते हैं ताकि यह अंततः सी # की yield के समान ही काम कर सकें, जो कि कोड की समान मात्रा के बारे में है (क्लास इम्प्लेमेणेशन को त्यागने से, क्योंकि यह होगा असीम रूप से पुन: उपयोग करने योग्य)

मैंने अपने आप को प्रयास करने के लिए यील्ड के बारे में पर्याप्त परवाह नहीं की है, लेकिन यह संभव होना चाहिए उसने कहा, यह तुच्छ से भी दूर है, क्योंकि सी # टीम के सदस्य एरिक लिपर ने इसे " संकलक में सबसे जटिल परिवर्तन " कहा है। मैं भी विश्वास में आया हूं क्योंकि मैंने एक साल पहले इस बारे में पहला मसौदा लिखा था, जब तक कि Visual Studio 2010 के बाहर आने तक यह वास्तव में एक सार्थक तरीके से संभव नहीं है, क्योंकि इसके लिए Iterator वर्ग को कई लैंबडा भेजने की आवश्यकता होती है और वास्तव में व्यावहारिक हमें बहु-लाइन लैम्ब्डास के लिए [.NET 4 3 के समर्थन की आवश्यकता है।

एसिंक सीटीपी में Yield में Yield लिए समर्थन शामिल है।

उपयोग के बारे में जानकारी के लिए विजुअल बेसिक में इटरेटर देखें।

और अब यह दृश्य स्टूडियो 2012 के साथ बॉक्स में शामिल है!

VB.NET में yield नकल पर विजुअल स्टूडियो मैगज़ीन में बिल्क मैककार्थी द्वारा वीबी में अब अच्छा लेख का प्रयोग करें Iterators है वैकल्पिक रूप से विजुअल बेसिक के अगले संस्करण की प्रतीक्षा करें।

मैं व्यक्तिगत तौर पर बस अपने खुद के इटरेटर वर्ग को लिखता हूं जो कि आईएनआईमेमेंटर (टी के) से मिलता है। इसे ठीक से लेने के लिए कुछ समय लगता है, लेकिन मुझे लगता है कि अंत में इसे सही लिखना बेहतर है और इसे टालने का प्रयास करें। एक और तरीका जो मैंने किया है वह एक पुनरावर्ती विधि लिखना है जो आयएनमेरेबल (टी के) को वापस करता है और केवल सूची (टी के) और उपयोग करता है .एडडेंज

उम्मीद है, यह VB के आगामी संस्करण के साथ अतीत की बात होगी चूंकि व्याकरणकर्ता वास्तव में नए मानदंडों के साथ बहुत अधिक महत्व प्राप्त कर रहे हैं (विशेष रूप से आलसी मूल्यांकन के साथ संयोजन में LINQ), यह काफी उच्च प्राथमिकता है, जहां तक ​​मैं पॉल विकी के ब्लॉग से जानता हूं। फिर, पॉल अब वीबी टीम के मुखिया नहीं हैं और मेरे पास अभी तक पीसीडी वार्ता देखने का समय नहीं है।

फिर भी, यदि आप रुचि रखते हैं, तो वे पॉल के ब्लॉग में जुड़े हुए हैं

नीचे कोड आउटपुट देता है

2, 4, 8, 16, 32

VB.NET में,

 Public Shared Function setofNumbers() As Integer() Dim counter As Integer = 0 Dim results As New List(Of Integer) Dim result As Integer = 1 While counter < 5 result = result * 2 results.Add(result) counter += 1 End While Return results.ToArray() End Function Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load For Each i As Integer In setofNumbers() MessageBox.Show(i) Next End Sub 

सी # में

 private void Form1_Load(object sender, EventArgs e) { foreach (int i in setofNumbers()) { MessageBox.Show(i.ToString()); } } public static IEnumerable<int> setofNumbers() { int counter=0; int result=1; while (counter < 5) { result = result * 2; counter += 1; yield return result; } } 

VB.NET के Iterator कीवर्ड https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/modifiers/iterator हैं

चूंकि विज़ुअल स्टूडियो 2012 ऐसा लगता है