Один из Типов "кортеж" в .net 4 является Одноэлементным Кортежем. Я просто задаюсь вопросом, какова цель этой структуры?
Единственное использование, которое я видел, при использовании в 8 + Кортеж, поскольку это может быть присвоено Тресту, где это на самом деле имеет смысл. Это - это? Или есть ли какая-либо другая цель?
Вы должны спросить разработчиков BCL, чтобы убедиться в этом, но я подозреваю, что, поскольку в реальном мире существуют кортежи из единиц, авторы .NET Framework хотели обеспечить эквивалентную симметрию в своей реализации.
Кортежи
- это .NET-реализация того, что вы бы считали математической концепцией кортежа .
Теперь, когда вы спрашиваете о программировании использования Tuple
, я бы также ответил, что существуют языки .NET (например, F #), которые могут использовать Tuple <>
для представления таких вещей, как возвращаемые значения из функций. Поскольку в результате функция F #, безусловно, может вернуть кортеж из 1, она добавляет симметрии и согласованности в поведение и восприятие языка.
Ваш пример с 8+ кортежами также, вероятно, законен, поскольку свойство Rest
может быть кортежем из 1 для представления «переполнения».
Кортежи, среди прочего, автоматически реализуют IStructuralComparable
и IStructuralEquatable
. Это позволяет сразу же сравнивать и сортировать кортежи. Из статьи Билла Маккарти в выпуске Visual Studio Magazine за декабрь 2009 г., «Типы и кортежи в .NET 4»:
Хотя кортежи могут выглядеть простыми и невзрачными, они обеспечивают строгую типизацию и важное сравнение и равенство функциональность. Кортежи полезны вне границ методов, классов или даже машин.
Помещая свой тип данных в кортеж, даже из одного элемента, вы гарантируете неизменность, сопоставимость и сопоставимость. Для кортежей, состоящих только из одного элемента, основным преимуществом использования кортежа будет неизменность: после создания кортежа его данные никогда не могут измениться в течение всего срока существования кортежа.
Все типы кортежей реализуют ITuple
, поэтому я предполагаю, что если вы хотите иметь возвращаемый тип ITuple
, вам понадобится опция имея одно значение, как вы предлагаете.