2010-09-30 9 views
5

मैं VB.NET में LINQ के साथ काम कर रहा हूँ और कभी कभी मैंवीबी का दमन करने के लिए कैसे

For i = 0 To 10 
    Dim num = (From n In numbers Where n Mod i = 0 Select n).First() 
Next 

की तरह एक प्रश्न के लिए मिलता है और फिर इसे चेतावनी आता है "पुनरावृत्ति चर लैम्ब्डा अभिव्यक्ति में उपयोग नहीं किया जाना चाहिए था" "लैम्ब्डा अभिव्यक्ति में पुनरावृत्ति चर का उपयोग करने से अप्रत्याशित परिणाम हो सकते हैं। इसके बजाय, लूप के भीतर एक स्थानीय चर बनाएँ और इसे पुनरावृत्ति चर के मान असाइन करें।"

मुझे पता है कि यह लैम्ब्डा अभिव्यक्ति में पुनरावृत्ति चर का उपयोग करने के लिए एक अच्छा अभ्यास नहीं है, क्योंकि लैम्बडा अभिव्यक्तियों का मूल्यांकन केवल तभी किया जाता है जब आवश्यक हो। (This question इसके बारे में है)

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

(एक स्थानीय चर घोषणा और यात्रा चर करने के लिए यह एक विकल्प है गुजर, लेकिन मैं एक साफ समाधान के लिए देख रहा हूँ।)

+3

* क्यों * आप कर रहे हैं के लिए एक विस्तृत कड़ी है किसी और चीज को ढूंढ रहे हैं"? –

+2

एक तीन लाइन ब्लॉक में (1.for 2. DoSomething (LinqExpression) 3. अगला) चौथी रेखा 'Dim LocalVar = iterationVar' होना अच्छा नहीं है। लेकिन ऐसा लगता है, यह सबसे अच्छा विकल्प है – jaraics

उत्तर

5

इस विशेष रूप से मामला जहां लैम्ब्डा का तुरंत मूल्यांकन किया जाता है, तो आप लूप के बाहर पुनरावृत्ति परिवर्तनीय की घोषणा को स्थानांतरित करके चेतावनी को सुरक्षित रूप से समाप्त कर सकते हैं।

Dim i = 0 
For i = 0 To 10 
... 

मैं हालांकि कि यह केवल काम करता है अगर लैम्ब्डा से बच नहीं करता है पाश के लिए (अपने परिदृश्य के लिए सही) पर जोर देना चाहते हैं।

इसके अलावा यहां एक लेख मैं इस चेतावनी पर लिखा था (कारण है कि यह मौजूद है, यह कैसे से बचने के लिए, आदि ...)

+0

धन्यवाद, यह भी एक विकल्प है। (यह सबसे अच्छा नहीं है, लेकिन शायद इस समाधान के लिए सबसे अच्छा विकल्प नहीं है) – jaraics

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