ভিবি.নেট - প্রতিটি লুপের জন্য কীভাবে পরের আইটেমে যান?


94

Exit Forলুপটি প্রস্থান না করে কেবল পরবর্তী আইটেমটিতে চলে আসে তা ছাড়া কি কোনও বিবৃতি রয়েছে ?

উদাহরণ স্বরূপ:

For Each I As Item In Items

    If I = x Then 
        ' Move to next item
    End If

    ' Do something

Next

আমি জানি কেবলমাত্র Elseযদি বিবৃতিতে একটি যুক্ত করতে পারে তবে এটি নীচে পড়তে হবে:

For Each I As Item In Items

    If I = x Then 
        ' Move to next item
    Else
        ' Do something
    End If

Next

কেবল ভাবছি Itemsতালিকার পরবর্তী আইটেমটিতে ঝাঁপ দেওয়ার কোনও উপায় আছে কিনা । আমি নিশ্চিত যে কেবলমাত্র Elseবিবৃতিটি ব্যবহার করবেন না কেন বেশিরভাগই সঠিকভাবে জিজ্ঞাসা করবেন, তবে আমার কাছে "কিছু কিছু করুন" কোড মোড়ানো কম পাঠযোগ্য বলে মনে হচ্ছে। বিশেষত যখন আরও অনেক কোড থাকে।

উত্তর:


178
For Each I As Item In Items
    If I = x Then Continue For

    ' Do something
Next

ধন্যবাদ এটি হ'ল আমি যা খুঁজছিলাম, মজাদার এটি এমএসডিএন ডকুমেন্টেশনে কীভাবে নেই ?? ( এমএসডিএন.মাইক্রোসফটকম /en-us/library/5ebk1751.aspx ) এছাড়াও পুরো 20 সেকেন্ডের পরে পোস্টে জোনকে মারার বিষয়ে অভিনন্দন! :)
শান টেলর

9
আমি আবার একবার স্কেটিড হয়ে গেলাম! ;)
অ্যাডাম রবিনসন

আপনি আরও ভালভাবে Ifবিবৃতিটি বন্ধ করতে চাই । এটা বিভ্রান্তিকর।
মিচার

48

আমি Continueপরিবর্তে বিবৃতি ব্যবহার করব:

For Each I As Item In Items

    If I = x Then
        Continue For
    End If

    ' Do something

Next

মনে রাখবেন যে এটিরটি নিজেই চালিয়ে যাওয়ার ক্ষেত্রে কিছুটা আলাদা theআশনের আগে যে কোনও কিছুই Ifআবার কার্যকর করা হবে। সাধারণত এটি আপনি যা চান তা তবে আপনি যদি না চান তবে আপনাকে লুপ ব্যবহার না করে GetEnumerator()এবং পরে MoveNext()/ Currentস্পষ্টতই ব্যবহার করতে হবে For Each



1

আমি পরিষ্কার হতে চাই যে নিম্নলিখিত কোডটি অনুশীলন নয়। আপনি গোটো লেবেল ব্যবহার করতে পারেন:

For Each I As Item In Items

    If I = x Then
       'Move to next item
        GOTO Label1
    End If

    ' Do something
    Label1:
Next

24
আপনি করতে পারেন, কিন্তু দয়া করে না।
মিসারিআইডেক্স

লাফ দেওয়ার কারণে, তাই এটি খারাপ।
সৈয়দ তৈয়ব আলী

4
যদি এটি ভাল অনুশীলন না হয়, এবং ভাষা আরও সমর্থন করে যে এর জন্য আরও স্পষ্টভাবে আরও ভাল সমাধান রয়েছে (এর জন্য চালিয়ে যাও / পুনরায় শুরু করুন), সম্ভবত এই উত্তরটি স্বেচ্ছায় সরানো উচিত।
eniacAvenger

স্ট্যাকওভারফ্লো উপলব্ধ বিকল্পগুলির পরিসীমা অন্বেষণের উদ্দেশ্যে একাধিক জবাব দেয়। আমি সম্মতি জানাই এটি একটি খারাপ বিকল্প, তবে এটি একটি বিকল্প। সুতরাং আমি মনে করি এটি সম্পূর্ণতার জন্য অন্তর্ভুক্ত হওয়ার উপযুক্ত।
জেফ

0

আমি যখন Continue Forএটি ব্যর্থ চেষ্টা করেছি, তখন আমার একটি সংকলক ত্রুটি পেয়েছে। এটি করার সময়, আমি 'পুনঃসূচনা' আবিষ্কার করেছি:

For Each I As Item In Items

    If I = x Then
       'Move to next item
       Resume Next
    End If

    'Do something

Next

দ্রষ্টব্য: আমি এখানে ভিবিএ ব্যবহার করছি।


4
এই কোডটি ভিবিএতেও কাজ করে না। Resume Nextহ'ল অনঠামুক্ত ত্রুটি পরিচালনার জন্য।
ড্যানিয়েল

ভিবিএতে লুপের পুরো প্রান্তটি মোড়ানোর জন্য আপনাকে একটি বড় আইএফ স্টেটমেন্ট ব্যবহার করতে হবে কারণ কোনও চালিয়ে যাওয়া বিবৃতি নেই। সুতরাংIf I <> x Then
হ্যাকস্ল্যাশ

0

শুধুমাত্র "চালিয়ে যাও" একটি গ্রহণযোগ্য মান (বাকীগুলি "স্প্যাগেটি কোড" বাড়ে)।

কমপক্ষে "চালিয়ে যাও" দিয়ে প্রোগ্রামার জানেন কোডটি সরাসরি লুপের শীর্ষে যায়।

যদিও বিশুদ্ধবাদীদের পক্ষে এটি শুদ্ধ "নন-স্প্যাগেটি" কোড হওয়ায় এ জাতীয় কিছু সেরা।

Dim bKeepGoing as Boolean 
For Each I As Item In Items
  bKeepGoing = True
  If I = x Then
    bKeepGoing = False
  End If
  if bKeepGoing then
    ' Do something
  endif
Next

কোডিংয়ের স্বাচ্ছন্দ্যের জন্য যদিও "চালিয়ে যাও" ঠিক আছে। (যদিও এটি মন্তব্য করার জন্য ভাল ধারণা)।

"এর জন্য চালিয়ে যান" ব্যবহার

For Each I As Item In Items
  If I = x Then
    Continue For   'skip back directly to top of loop
  End If
  ' Do something
Next
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.