@Multigame

Как передаются Dictinary в C#?

Добрый день.
Подскажите пожалуйста, ведь словари передаются всегда по ссылке?
Т.е. к примеру. Есть два класса ClassA() и ClassB()

Создаем словарь и передаем его в метод класса А, где его меняем.
Затем создаем и дергаем метод класса Б, в который так же предаем словарь.

Увидим ли мы в классе B изменения произведенные в словаре методом класса A?
Повлияет ли на результат асинхронность методов классов? await-async
  • Вопрос задан
  • 688 просмотров
Решения вопроса 1
Griboks
@Griboks Куратор тега C#
Словари передаются по ссылке. Но если очень хочется, их можно передать по значению вручную.
Асинхронность async/await допускает использование словарей без исключений. (Вы ведь просто исполняете код в другом порядке.)
Возможно, вы перепутали асинхронность с многопоточностью, где словари желательно не изменять из разных потоков.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
а написать тест в 5 строк не судьба?

в случае присвоения переменной - присваивается ссылка, тогда более одной переменной могут указывать на один и тот же экземпляр объекта

в качестве параметров методов, обычно передаются копии объектов, думаю Dictionary подчиняется общим правилам* (напомню - это элементарно проверить - консольное приложение на несколько строк)

для гарантированной передачи ссылки в качестве параметра, следует использовать префикс ref

ps * - две проверки подтвердили передачу по ссылке, ну что же, значит по ссылке, сори за поспешность ))

Повлияет ли на результат асинхронность методов классов? await-async
думаю тут надо искать сведения о потокобезопасности. на пример
https://docs.microsoft.com/ru-ru/dotnet/standard/c...
Dictionary там вроде не упоминается, но упоминается ConcurrentDictionary возможно вам надо присмотреться к пространству имен System.Collections.Concurrent
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы