मैंने Queues<T>
का उपयोग किसी भी वास्तविक डिग्री से पहले नहीं किया है, इसलिए मुझे कुछ स्पष्ट याद आ रही है। मैं इस तरह एक Queue<EnemyUserControl>
(हर फ्रेम) के माध्यम से पुनरावृति करने के लिए कोशिश कर रहा हूँ:कतार फॉरएच लूप फेंक अमान्यऑपरेशन अपवाद
foreach (var e in qEnemy)
{
//enemy AI code
}
जब एक दुश्मन मर जाता है, दुश्मन उपयोगकर्ता नियंत्रण एक घटना मैंने सदस्यता ली है को जन्म देती है और मैं इस (पहले दुश्मन करना कतार डिजाइन द्वारा हटा दिया जाता):
void Enemy_Killed(object sender, EventArgs e)
{
qEnemy.Dequeue();
//Added TrimExcess to check if the error was caused by NULL values in the Queue (it wasn't :))
qEnemy.TrimExcess();
}
हालांकि, बाद विपंक्ति विधि कहा जाता है, मैं foreach
पाश पर एक InvalidOperationException
मिलता है। जब मैं Peek
का उपयोग करता हूं, तो इसमें कोई त्रुटि नहीं होती है, इसलिए इसे क्यूई को बदलने के साथ कुछ करना पड़ता है क्योंकि डेक्यू ऑब्जेक्ट को हटा देता है। मेरा प्रारंभिक अनुमान यह है कि यह शिकायत कर रहा है कि मैं एक संग्रह को संशोधित कर रहा हूं जिसे गणनाकर्ता द्वारा पुनरावृत्त किया जा रहा है, लेकिन लूप के बाहर डेक्यूइंग किया जा रहा है?
कोई भी विचार जो इस मुद्दे को उत्पन्न कर सकता है?
धन्यवाद
आप का उपयोग करना चाहिए 'जबकि (queue.Any()) queue.Dequeue();' – Telemat