කවුන්ටර විචල්යයක් භාවිතා කිරීමේ කිසිදු වරදක් නැත. ඇත්ත වශයෙන්ම, ඔබ භාවිතා කළත් for
, foreach
while
නැතහොත්do
, කවුන්ටර විචල්යයක් කොතැනක හෝ ප්රකාශ කර වැඩි කළ යුතුය.
එබැවින් ඔබට සුචිගත කළ සුචිගත එකතුවක් තිබේදැයි ඔබට විශ්වාස නැත්නම් මෙම මෝඩකම භාවිතා කරන්න:
var i = 0;
foreach (var e in collection) {
// Do stuff with 'e' and 'i'
i++;
}
වෙන භාවිතය මේ එක නම් ඔබ දැන ඔබගේ බව සුචිමය දර්ශකය ප්රවේශ (ඒ සඳහා දෙනු ලබන එකතුව O (1) වන Array
සහ සමහරවිට සඳහා List<T>
(ලේඛගතකිරීම කියන්නේ නැහැ), නමුත් අවශ්යයෙන්ම අනෙකුත් වර්ග සඳහා (උදාහරණ වශයෙන් LinkedList
:))
// Hope the JIT compiler optimises read of the 'Count' property!
for (var i = 0; i < collection.Count; i++) {
var e = collection[i];
// Do stuff with 'e' and 'i'
}
IEnumerator
ආයාචනා කිරීමෙන් MoveNext()
සහ ප්රශ්න කිරීමෙන් 'අතින්' ක්රියා කිරීම කිසි විටෙකත් අවශ්ය නොවිය යුතුය Current
- foreach
එම කරදරය ඔබව බේරා ගනී ... ඔබට අයිතම මඟ හැරීමට අවශ්ය නම් continue
, ලූපයේ ශරීරය භාවිතා කරන්න .
සම්පූර්ණත්වය සඳහා, ඔබේ දර්ශකය සමඟ ඔබ කරමින් සිටි දේ මත පදනම්ව (ඉහත ඉදිකිරීම් මඟින් නම්යශීලී බවක් ලබා දෙයි), ඔබට සමාන්තර ලින්ක් භාවිතා කළ හැකිය:
// First, filter 'e' based on 'i',
// then apply an action to remaining 'e'
collection
.AsParallel()
.Where((e,i) => /* filter with e,i */)
.ForAll(e => { /* use e, but don't modify it */ });
// Using 'e' and 'i', produce a new collection,
// where each element incorporates 'i'
collection
.AsParallel()
.Select((e, i) => new MyWrapper(e, i));
අපි AsParallel()
ඉහත භාවිතා කරන්නේ , එය දැනටමත් 2014 වන අතර, දේවල් වේගවත් කිරීම සඳහා එම බහු හරයන් හොඳින් භාවිතා කිරීමට අපට අවශ්යය. තවද, '' අනුක්රමික 'LINQ සඳහා, ඔබ පමණක් ලබා ForEach()
මත දීර්ඝ ක්රමය List<T>
හාArray
... හා එය භාවිතා සරල කරන්නේ වඩා ඕනෑම වඩා හොඳ බව පැහැදිලි නැහැ foreach
ඔබ තවමත් uglier කාරක රීති සඳහා තනි-පිලිතුරු පොටවල් ධාවනය වන බැවින්,.