در این ویدیو می‌خوایم ببینیم چطور با موارد تکراری کنار بیایم.
بنابراین فرض کنید ما یک ورودی در 104 با Flop Smith داریم.
و ما نمی‌دونیم که یک Flop Smith در 104 در این Key (کلید) وجود داره.
و به طور اتفاقی ما یک کارمند اینجا اضافه می‌کنیم.
بنابراین `employees.Add` و می‌گیم در 104 می‌خوایم Mike JK رو اضافه کنیم.
بسیار خب.
پس اگه حالا این کار رو انجام بدیم، بیایید اجراش کنیم.
خواهیم دید که به یک خطا برخواهیم خورد.
بنابراین می‌گه: `System.ArgumentException`.
یک آیتم با Key یکسان قبلاً اضافه شده است.
پس می‌بینید که نمی‌تونید یک آیتم جدید رو در همون Keyای که یک آیتم قبلاً درش وجود داره، اضافه کنید.
پس چطور می‌تونید احتمالاً اون رو رفع کنید؟
یا چطور می‌تونید از دستش خلاص بشید؟
خب، یکی از راه‌ها اینه که اگه مطمئن نیستید که آیا یک آیتم در این Key خاص وجود داره یا نه، می‌تونید از این روش اینجا استفاده کنید.
پس به جای اینکه بگید Mike رو در 104 اضافه کنید یا Mike JK، کاری که می‌تونستیم انجام بدیم این بود که فقط بگیم 104 رو اضافه کن. بنابراین در این Key 104، Mike JK رو وارد کن، باشه، اما این در واقع داره Update می‌کنه، درسته.
پس این اضافه کردن نخواهد بود.
اما اگه واقعاً بخوایم مطمئن بشیم که یک آیتم رو اضافه می‌کنیم چی؟
خب، نکته اینه که کاری که می‌تونیم انجام بدیم اینه که چک کنیم آیا آیتم از قبل وجود داره یا نه.
پس می‌تونیم جلو بریم و بگیم: `if (!employees.ContainsKey)` (اگر کارمندان شامل Key نبود). و بعد باید بگیم داریم به کدوم Key نگاه می‌کنیم.
پس اگه یک Key در 104 وجود داشته باشه، اون وقت ما آیتم رو اضافه نمی‌کنیم. با این حال، می‌تونیم علامت تعجب رو هم اضافه کنیم و بگیم اگه هیچ آیتمی در این Key 104 وجود نداشته باشه.
پس `employees` آیتمی در این Key 104 نداره، اون وقت جلو برو و بگو `employees.Add` و بعد Mike Jake خودت رو در 104 اضافه کن.
باشه، همونطور که می‌بینید، در مورد نام‌ها خیلی خلاقم.
بنابراین، بله، اینجاست.
پس اینطوری می‌تونید موارد تکراری رو مدیریت کنید.
می‌تونید چک کنید آیا یک آیتم وجود داره و بعد اگه خواستید می‌تونید اون رو اضافه کنید.
در غیر این صورت، باید IDای رو پیدا می‌کردید که هنوز آزاده و باید اون رو اونجا اضافه می‌کردید.
حالا این اساساً یک حلقه `while` خواهد بود که در اون از طریق تمام Keyهایی که وجود دارن یا وجود ندارن می‌رید و مثلاً، اون IDها رو تا جایی که Key آزاد بشه، افزایش می‌دید، و بعد فقط آیتم جدید رو در اون موقعیت Key اضافه می‌کردید، به طور خاص در این Key خاص.
پس این یک راه برای مدیریت اون خواهد بود، باشه.
پس ما یک **Counter** (شمارنده) ایجاد می‌کنیم.
از این حلقه `while` استفاده می‌کنیم که در اون فقط می‌گیم: باشه.
تا زمانی که در این موقعیت **Counter** یک کارمند وجود داره، فقط **Counter** رو افزایش بده.
و بعد در نقطه‌ای که دیگه اینطور نیست، این حلقه `while` تموم می‌شه و ما به این خط اینجا می‌رسیم که در اون فقط می‌گیم: باشه، در اون موقعیت **Counter**.
هر موقعیتی که هست، Jesus Christ رو اضافه کن.
باشه، پس این فقط یک راه‌حل موقتی کوچیکه که می‌تونید برای اون موقعیت خاص استفاده کنید.
حالا یک راه دیگه می‌تونه این باشه که این واقعاً فقط یک راه‌حل موقتیه.
پس بذارید از شر این خلاص بشم.
اگه می‌خواید یک کارمند رو در یک ID مشخص اضافه کنید، اما مطمئن نیستید که می‌تونید یا نه، می‌تونید از متد `TryAdd` استفاده کنید.
پس می‌تونید از `employees.TryAdd` استفاده کنید.
و کاری که این `TryAdd` انجام می‌ده اینه که یک `bool` برمی‌گردونه، و سعی می‌کنه یک آیتم رو در یک ID مشخص به Dictionary شما اضافه کنه.
پس فرض کنید اگه بخوام کسی رو در 102 اضافه کنم و بهش نام Michael Brims رو بدم، اون وقت این فقط کار می‌کنه اگه در 102 کسی نباشه.
بنابراین اگه این نقطه هنوز در دسترس باشه.
پس می‌تونم فقط یک `bool` ایجاد کنم که بگه اضافه شده.
پس مثلاً اگه این کار کرد، پس اگه اضافه کردن کار کرد، اون وقت این `true` خواهد بود. در غیر این صورت `false` خواهد بود.
پس می‌تونم فقط چک کنم اگه `added` (اضافه شده) `true` نیست، اون وقت قراره بگم نتونست کارمند رو اضافه کنه یا کارمند از قبل وجود داره.
پس کارمند با ID 102 از قبل وجود داره.
پس اگه این رو اجرا کنیم، خواهیم دید که این در واقع از قبل وجود داره.
پس کارمند با ID 102 از قبل وجود داره و اون Jane Smith هست. باشه.
و چرا ما Jane Smith رو می‌دونیم.
خب چون ما از این حلقه `for each` استفاده کردیم تا تمام کاربرانی که داریم یا کارمندانی که در Dictionaryمون داریم رو نمایش بدیم. باشه.
پس این‌ها فقط چند موردی بود که می‌تونید با Dictionaryها انجام بدید.
به نظرم بیایید به Dictionaryای نگاه کنیم که Key اون هنوز `int` هست، اما Value اون پیچیده‌تر از فقط یک `string` هست.
بسیار خب، پس در ویدیوی بعدی می‌بینمتون.