Единственный способ сделать это - удалить и снова добавить элемент словаря
Почему?Это потому, что словарь работает с процессом, называемым цепочкой и сегментами (он похож на хеш-таблицу с другой стратегией разрешения коллизий)
Когда элементдобавленный в словарь, он добавляется в корзину, к которой привязывается его ключ, и, если там уже есть экземпляр, он добавляется в цепочечный список.Если вам нужно сменить ключ, он должен будет пройти через процесс определения, где он принадлежит.Таким образом, самое простое и разумное решение - просто удалить и повторно добавить элемент
Решение
var data = SomeFunkyDictionary[key];
SomeFunkyDictionary.Remove(key);
SomeFunkyDictionary.Add(newKey,data);
Или сделать свой метод расширения
public static class Extensions
{
public static void ReplaceKey<T, U>(this Dictionary<T, U> source, T key, T newKey)
{
if(!source.TryGetValue(key, out var value))
throw new ArgumentException("Key does not exist", nameof(key));
source.Remove(key);
source.Add(newKey, value);
}
}
Использование
SomeFunkyDictionary.ReplaceKey(oldKye,newKey);
Примечание : добавление и удаление из словаря влечет за собой штраф, если вам не нужно быстропоиски, может быть более подходящим вообще не использовать словарь или использовать какую-то другую стратегию.