2011-08-24 9 views
8

enter image description hereयह रीशेर्पर स्निपेट 'विधि समूह में कनवर्ट' वास्तव में क्या कर रहा है?

परिवर्तन से पहले कोड:

List<ProductBrandModel> model = brands.Select(item => Mapper.Map<ProductBrand, ProductBrandModel>(item)).ToList(); 

कोड सुधार के बाद:

List<ProductBrandModel> model = brands.Select(Mapper.Map<ProductBrand, ProductBrandModel>).ToList(); 

यह क्या कर रहा है? क्या यह brands संग्रह में प्रत्येक आइटम पर उस मैपिंग को निहित रूप से चला रहा है?

+0

मैं भी TPL को समझने, जबकि मेरी नीचे कोड के साथ एक ही मुद्दा का सामना करना पड़ा)); } निजी स्थिर शून्य Method1() { // कुछ काम } निजी स्थिर शून्य Method2() करना { // कुछ काम करना } ' – RBT

उत्तर

10

चूंकि आप सीधे Mapper.Map विधि पर लैम्ब्डा अभिव्यक्ति के पैरामीटर को पार कर रहे हैं, तो यह Select के प्रक्षेपण के रूप में सीधे इस विधि को निर्दिष्ट करने के बराबर है। Mapper.Map का हस्ताक्षर Func<TSource, TResult> प्रतिनिधि के साथ संगत है, इसलिए आर # लैम्ब्डा अभिव्यक्ति के बजाय विधि समूह का उपयोग करने का सुझाव देता है।

+0

आप तीन upvotes है, लेकिन मैं और अधिक प्रश्न हैं । :) मैं समझता हूं कि हस्ताक्षर है लेकिन जब मैं बेहतर कोड का उपयोग करता हूं तो क्या अनुमान लगाया जा रहा है? क्या होता है। प्रत्येक 'उत्पादब्रांड' ऑब्जेक्ट और मैपर को अपनाने का चयन करें। मैप मानता है कि बिट टीएसओएस है? –

+1

ठीक है, 'टीएसओआरएस' पहले ही ज्ञात है, क्योंकि 'ब्रांड' 'उत्पादब्रांड 'का संग्रह है। कंपाइलर 'Mapper.Map' के रिटर्न प्रकार से' TResult' का अनुमान लगाता है। –

3

पहली पंक्ति एक विधि बनाती है जो तुरंत Mapper.Map फ़ंक्शन को कॉल करती है। यह अनावश्यक है क्योंकि Mapper.Map विधि चयन की अपेक्षित परिभाषा से मेल खाती है और सीधे Mapper.Map को कॉल कर सकती है। Resharper इसे बदलता है ताकि केवल 1 विधि को बुलाया जा सके और संकलक द्वारा अतिरिक्त विधि उत्पन्न नहीं होती है। `निजी स्थिर शून्य ParallelForEach() { Parallel.Invoke (() => Method1(), () => Method2 (:

संबंधित मुद्दे