Словники (C # або інше) - це просто контейнер, де ви шукаєте значення на основі ключа. У багатьох мовах його більш правильно ідентифікують як карту, найпоширенішою реалізацією якої є HashMap.
Проблема, яку слід врахувати, - це те, що відбувається, коли ключ не існує. Деякі мови поводяться шляхом повернення null
або nil
іншого еквівалентного значення. Мовчати дефолт до значення, а не повідомляти про те, що значення не існує.
На краще чи на гірше, дизайнери бібліотек C # придумали ідіому, щоб розібратися з поведінкою. Вони аргументували, що поведінка за замовчуванням для пошуку значення, яке не існує, - це викинути виняток. Якщо ви хочете уникнути винятків, тоді можете скористатися Try
варіантом. Це той самий підхід, який вони використовують для розбору рядків у цілі числа чи об'єкти дати / часу. По суті, вплив такий:
T count = int.Parse("12T45"); // throws exception
if (int.TryParse("12T45", out count))
{
// Does not throw exception
}
І це перейшло до словника, індексатор якого делегує Get(index)
:
var myvalue = dict["12345"]; // throws exception
myvalue = dict.Get("12345"); // throws exception
if (dict.TryGet("12345", out myvalue))
{
// Does not throw exception
}
Це просто так, як розроблена мова.
Чи out
слід відмовляти змінним?
C # - це не перша мова, яка має їх, і вони мають своє призначення в конкретних ситуаціях. Якщо ви намагаєтеся побудувати високосполучну систему, то ви не можете використовувати out
змінні на межах одночасності.
Багато в чому, якщо є ідіома, яку підтримують мова та основні постачальники бібліотек, я намагаюся прийняти ці ідіоми у своїх API. Завдяки цьому API відчуває себе більш послідовно та вдома на цій мові. Таким чином, метод, написаний в Ruby, не буде схожий на метод, написаний на C #, C або Python. Кожен з них має вподобаний спосіб побудови коду, а робота з цим допомагає користувачам вашого API швидше засвоїти його.
Чи загалом Карти є антидіаграмою?
Вони мають своє призначення, але багато разів вони можуть бути неправильним рішенням для вашої мети. Особливо, якщо вам потрібне двонаправлене картографування. Існує багато контейнерів і способів організації даних. Ви можете скористатися багатьма підходами, і іноді вам потрібно трохи подумати, перш ніж вибирати контейнер.
Якщо у вас дуже короткий список значень двонаправленого відображення, вам може знадобитися лише список кортежів. Або список структур, де ви можете так само легко знайти перший матч по обидва боки карти.
Подумайте про проблемну область та виберіть найбільш відповідний інструмент для роботи. Якщо такого немає, то створіть його.