को देखते हुए दृश्य Basic.NET में निम्न कोड:
Dim x As New Dictionary(Of String, String)
x.Item("Foo") = "Bar"
आप निम्न में से किसी का उपयोग कर शब्दकोश की "फू" सदस्य पहुँच सकते हैं:
Dim a = x!Foo
Dim b = x("Foo")
Dim c = x.Item("Foo")
आप को देखो, तो आईएलएल के तहत Reflector.NET के बाद आप पाएंगे कि वे सभी अनुवाद करते हैं:
Dim a As String = x.Item("Foo")
Dim b As String = x.Item("Foo")
Dim c As String = x.Item("Foo")
तो, वे सभी समकक्ष हैं आईएल में टी और, ज़ाहिर है, वे सभी एक ही गति पर निष्पादित करते हैं।
बैंग ऑपरेटर केवल आपको मानक रूप से परिभाषित कुंजी का उपयोग करने देता है जो मानक परिवर्तनीय नामकरण नियमों के अनुरूप है।
अनुक्रमित दृष्टिकोण का उपयोग करके आपकी चाबियाँ लगभग किसी वैध मान (इस मामले में स्ट्रिंग) हो सकती हैं और आप कुंजी का प्रतिनिधित्व करने के लिए चर का उपयोग कर सकते हैं।
कोड पठनीयता के लिए मैं x.Item("Foo")
नोटेशन की अनुशंसा करता हूं क्योंकि यह क्या हो रहा है के बारे में बहुत स्पष्ट है। x("Foo")
को किसी प्रक्रिया के लिए कॉल के साथ भ्रमित किया जा सकता है और x!Foo
Foo
एक चर जैसा दिखता है और स्ट्रिंग नहीं (जो वास्तव में है) बनाता है। यहां तक कि स्टैक ओवरफ़्लो रंग-कोडिंग Foo
एक कीवर्ड की तरह दिखता है!
इस कोड के लिए सी # समकक्ष x["Foo"];
है। !
वाक्यविन्यास समतुल्य नहीं है।
तो, नीचे की रेखा यह है कि !
प्रदर्शन पर बेहतर या खराब नहीं है और केवल कोड रखरखाव को और अधिक कठिन बना सकता है, इसलिए इसे टालना चाहिए।
भविष्य के संदर्भ के लिए ... अब मुझे एहसास हुआ कि डीबगिंग उद्देश्यों के लिए '! 'बेहतर है क्योंकि यह आपको ब्रेकपॉइंट पर खड़े होने पर मौजूदा इंडेक्स पर आइटम की सामग्री देखने की अनुमति देता है जबकि अन्य आपको बताएंगे कि' अनुक्रमित संपत्ति देखें '। – PedroC88