Ответ
Нет, в стандартном Dictionary<TKey, TValue> каждый ключ должен быть уникальным. Попытка добавить запись с ключом, который уже существует, приведёт к исключению ArgumentException.
Пример ошибки:
var dict = new Dictionary<string, int>();
dict.Add("id", 1);
dict.Add("id", 2); // System.ArgumentException: An item with the same key has already been added.
Проверка и безопасное добавление: Перед добавлением следует проверять наличие ключа.
string key = "userId";
int value = 42;
if (!dict.ContainsKey(key))
{
dict.Add(key, value);
}
// Или используйте индексер, который перезаписывает значение:
dict[key] = value; // Если ключ существовал - значение будет перезаписано.
Альтернативы для хранения нескольких значений по одному ключу: Если логика требует группировки нескольких значений, используйте словарь со списком или коллекцией.
var multiValueDict = new Dictionary<string, List<string>>();
// Вспомогательный метод для добавления
void AddToMultiDict(string key, string value)
{
if (!multiValueDict.TryGetValue(key, out var list))
{
list = new List<string>();
multiValueDict[key] = list;
}
list.Add(value);
}
AddToMultiDict("tags", "C#");
AddToMultiDict("tags", "dotnet");
// multiValueDict["tags"] содержит List<string> {"C#", "dotnet"}
Важно: Уникальность ключа определяется методами GetHashCode() и Equals() типа TKey. Для пользовательских типов, используемых в качестве ключа, эти методы должны быть корректно переопределены.