Подтвердить что ты не робот

.NET: Значения словаря хранятся по ссылке или значению

У меня есть Dictionary<int, Product>. Если один и тот же Продукт добавлен к нескольким ключевым словам, это новый экземпляр этого объекта, который хранится для каждого ключа? Или просто ссылка на исходный объект?

Эта коллекция очень большая, и каждый продукт будет иметь от 1 до 10 ключей к ней. Моя главная проблема - выделение памяти.

4b9b3361

Ответ 1

Если Product является ссылочным типом (class и not struct), будет сохранена только ссылка.

Ответ 2

Нет, он должен использовать ту же ссылку на исходный объект.

Я не совсем уверен, как он будет себя вести, если словарь будет сериализован/десериализован.

Ответ 3

В Dictionary будет отображаться копия значения ключа, который вы передаете. Невозможно было бы это или любой другой сбор/контейнер, если на то пошло, хранить ссылку на любое значение, поскольку контейнер может пережить переменную, которую вы пытались сохранить в ней. Теперь, как говорили другие, если тип значения является ссылочным типом, значение переменной является просто ссылкой, поэтому вы просто сохраняете копию ссылки на переменную. Если Тип значения словаря является типом значения, тогда фактическое значение будет скопировано.

Ответ 4

ссылочные типы хранятся как ссылки всегда. никто не собирается догадываться, какую логику "клонирования" вы намерены использовать для своего типа. если вам нужны копии, вам придется создавать их самостоятельно, прежде чем размещать их в контейнерах, переходить на другие функции и т.д.

скопированы типы значений (создается упрощенная копия представления байтов, однако все ссылочные значения по-прежнему будут ссылками), если они не переданы как ссылки на функции. для контейнеров, хотя они будут копиями. если вы не создадите для них ссылочную оболочку.