чем кортеж отличается от класса?

как кортеж отличается от класса? вместо следующего кода мы можем создать класс с 3 полями и сделать из него объекты. Чем этот кортеж отличается от этого? Это только уменьшает код, который мы пишем, или это имеет какое-то отношение к скорости, учитывая тот факт, что вы не можете изменить элементы в кортеже.

Tuple<int, string, bool> tuple = new Tuple<int, string, bool>(1, "cat", true);

4 ответов


это избавляет вас от необходимости определять новый класс с пользовательскими свойствами.

это тут определить равенство по значению трех элементов, что является то, что голые кости класс не будет делать без пользовательского кодирования. Это плюс тот факт, что он неизменен, делает его разумным кандидатом на хэш-ключ в Dictionary.

один недостаток заключается в том, что свойства ванили Item1, Item2, etc., поэтому они не предоставляют никакого контекста значениям внутри им, где свойства вроде ID, Name, Age будет.


Tuple is класс. Тот, который содержит любые данные, которые вы хотите (в ужасно названных свойствах, таких как Item1).

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


Кортежи, на мой взгляд, приглашение к плохому моделированию данных. Вместо создания правильной модели вы получаете универсальный объект, который может содержать N свойств элемента. Название тоже очень общее.. Элемент1..ItemN


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

имейте в виду, что параметр out не может использоваться с методами async/await, здесь пригодятся кортежи.

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