यदि आप Visual Basic .NET में नीचे दी गई क्वेरी को संकलित करने का प्रयास करते हैं, तो यह विफल हो जाता है।मैं वीबी में ToString() क्यों प्रोजेक्ट नहीं कर सकता?
From x In {1, 2} Select x.ToString()
संकलक द्वारा दिए गए त्रुटि है:
रेंज चर नाम 'वस्तु' वर्ग के एक सदस्य के नाम से मेल नहीं कर सकते।
, हालांकि बराबर सी # क्वेरी के साथ गलत कुछ भी नहीं है:
from x in new[]{1, 2} select x.ToString()
यह ToString
अधिभार है कि एक प्रारूप लेता है के साथ ऐसा नहीं होता है (यह Int32 के एक सदस्य है, वस्तु नहीं)। यह ऑब्जेक्ट के अन्य सदस्यों के साथ होता है, जब तक वे कोई तर्क नहीं लेते: GetType और GetHashCode के साथ यह विफल हो जाता है; बराबर (ऑब्जेक्ट) के साथ यह संकलित करता है।
यह प्रतिबंध क्यों है, और मैं किस विकल्प का उपयोग कर सकता हूं?
दिलचस्प। 'X में {1, 2} x.oString ("d") का चयन करें, संकलित करता है, संभवतः क्योंकि' ऑब्जेक्ट 'में यह नहीं है। हालांकि मुझे कोई वीबी नहीं पता है, लेकिन यह अजीब लग रहा है। – Kobi
@ कोबी: मुझे लगता है कि आपका उदाहरण संकलित करता है क्योंकि 'ऑब्जेक्ट' में कोई 'ToString' सदस्य नहीं है जो तर्क लेता है। यह एक समस्या क्यों होगी मुझे पहेली क्या है। –
मुझे लगता है कि ऐसा इसलिए है क्योंकि यह तर्क के साथ बुलाए जाने पर स्पष्ट रूप से एक संपत्ति नहीं है, और इसलिए वीबी जानता है कि आप 'ToString' संपत्ति के साथ अज्ञात ऑब्जेक्ट बनाने के लिए इसका उपयोग नहीं कर रहे हैं - जबकि यह किसी अन्य को गलत बनाता है। (जो हो सकता है कि आप क्या कह रहे थे - मैं वीबी विशेषज्ञ नहीं हूं।) – Rup