لماذا لا أستطيع. إضافة إلى قاموس (مفتاح، القيمة) في foreach؟

StackOverflow https://stackoverflow.com/questions/421155

  •  05-07-2019
  •  | 
  •  

سؤال

إذا أريد لحلقة أكثر من قاموس (مفتاح، القيمة) ... لماذا أنا غير قادر على إضافة زوج قيمة المفتاح الجديد في الحلقة؟

Dictionary<string, string> persons = new Dictionary<string, string>();

persons.Add("roger", "12");
persons.Add("mary", "13");

foreach (KeyValuePair<string,string> person in persons)
{
 Console.WriteLine("Name: " + person.Key + ", Age: " + person.Value);
 persons.Add("Xico", "22");
}
هل كانت مفيدة؟

المحلول

إذا كنت تريد أن تفعل هذا يجب عليك الحصول على نسخة من قاموس كائن (يمكن أن يتم بطرق عديدة) ثم تعداد ذلك، إضافة ما تريد إلى النص الأصلي.

وببساطة لا يمكنك إضافة بنود جديدة أثناء تعداد في قاموس.

نصائح أخرى

وذلك لأن الطريقة التي يتم بناؤها العداد.

Dictionary.Enumerator :

<اقتباس فقرة>   

وهناك العداد لا يزال صالحا ما دام جمع دون تغيير. إذا تم إجراء تغييرات على جمع، مثل إضافة أو تعديل أو حذف العناصر، العداد ينتقض irrecoverably وسلوكها غير معرف.

وانها سهلة يكفي للالتفاف حول هذا، وإن كان. جعل مجرد نسخة من قاموس (أو انها مفاتيح) وتكرار من خلال ذلك، إضافة / إزالة / الخ. من قاموس الأصلي حسب الحاجة.

ولا يمكنك تعديل قاموس عند تعداد، البساطة. وإلا متى كنت تعرف أنك فعلت؟

عند تعداد مجموعة (أي حلقة foreach)، فإنه ليس من الممكن لإضافة أو إزالة عناصر من المجموعة. التفكير في كل القضايا التي من شأنها أن تجلب إذا كان ذلك سمح.

وهذا مجرد ... الغريب. كنت في محاولة لإضافة نفس الشخص مرة أخرى لكل شخص بالفعل في القاموس.

وأيضا: لماذا تخزين سن كسلسلة؟ الباحث (أو حتى التاريخ والوقت) يبدو أكثر ملاءمة بكثير.

ولأنه سيغير سلع قاموس أنك التمرير ... انه ليس لديها شعور ... (وكنت قد حلقات إلى الأبد)

وأنت تحاول تغيير عدد الإدخالات في جمع حين بالتكرار عبر الحلقة. ألف لحلقة يمكن تحقيق ذلك، ولكن foreach سوف iterater لا يسمح لك القيام بذلك.

Dictionary<string, string> persons = new Dictionary<string, string>();
persons.Add("roger", "12");
persons.Add("mary", "13");
for (int i = 0; i < persons.Count; i++){ 
Console.WriteLine("Name: " + persons[i].Key + ", Age: " + persons[i].Value); 
persons.Add("Xico", "22");
}

كن على علم أن هذه حلقة لا نهائية، لأنك دائما إضافة شخص قبل ان تحصل على الإدخال الأخير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top