2012-01-17 7 views
18

हैरान करनेवाला निम्न कोड उदाहरण पर विचार करेंList.ForEach मुझे

TempList.ForEach(Function(obj) obj.Deleted = True) 

मैं परिणाम एक ही होने की अपेक्षा करेंगे दूसरा तथापि, कोड उदाहरण सूची टेम्पलेट सूची में वस्तुओं को नहीं बदलता है।

यह पोस्ट समझने के लिए और अधिक क्यों है ...? या कम से कम कुछ समझने में मदद करें क्यों ...

उत्तर

40

ऐसा इसलिए है क्योंकि आपने Sub के बजाय Function का उपयोग किया था। चूंकि Function एक मान देता है, इसलिए संकलक मानता है कि बराबर चिह्न (=) तुलना के रूप में उपयोग किया जाता है, असाइनमेंट नहीं। आप Sub को Function बदलते हैं, तो संकलक सही ढंग से विचार किया जाएगा बराबर एक काम के रूप में साइन इन करें: यदि आप एक बहु लैम्ब्डा था

TempList.ForEach(Sub(obj) obj.Deleted = True) 

;

TempList.ForEach(Function(obj) 
        obj.Deleted = True 
        Return True 
       End Function) 

जाहिर है, foreach विधि के लिए यह कोई मतलब नहीं एक Function उपयोग करने के लिए है क्योंकि मान का उपयोग नहीं किया जाएगा, ताकि आप एक Sub का उपयोग करना चाहिए बनाता है: यदि आप इस समस्या नहीं पड़ता था।

+0

अहह जो अब सही समझ में आता है, उसके लिए बहुत धन्यवाद। यह सब अभी भी मेरे लिए काफी नया है :-) –

+0

मुझे यह स्वीकार करना होगा कि पहले, मुझे नहीं पता था कि क्या हो रहा था ;-) –

+0

मुझे आश्चर्य है कि यह सामान कितना शक्तिशाली है, खुद को यह सीखने के लिए मजबूर कर रहा है LINQ है। –