Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Присваиваем сразу много значений кортежами

03.03.23 17:27
Присваиваем сразу много значений кортежами
 
alex445 коренной житель
Последний раз изменено 03.03.23 17:34 (alex445)

Скажем, в одном контексте (блоке кода) доступы объекты


А а;

B b;


Есть метод, который возвращает значения для этих объектов


(A MyA, B MyB) MyMethod();


В чём разница между двумя следующими присваиваниями ниже? Как оно выглядит - пофиг. Меня интересует производительность и потребление памяти.


(a, b) = MyMethod();


var result = MyMethod();

a = result.MyA;

b = result.MyB;


Пример может быть и сложнее - скажем, вместо простых a и b могут быть свойства разных объектов, коллекции и прочее. Но мне удобно объединить возврат в кортеж и присвоить тоже в кортеже, т.к. все значения в возврате связаны семантически. А не создавать отдельный объект на возврат и не писать портянку отдельных присваиваний, как во втором случае.


Вообще, запись

(a, b) = MyMethod();

создаёт кортеж из a и b в левом операнде, или это просто синтаксический сахар для присваивания? Если кортеж создаётся, то вот оно и потребление памяти - целый объект создался! В отличие от второго варианта сверху, где a и b присваиваются независимо, и следовательно кортеж для них не создаётся. Но зато я пишу куда больше кода.

 

Перейти на