Итак, простой ответ на ваш вопрос заключается в том, что C # не предоставляет любой синтаксический сахар для работы с кортежами, поэтому нет способа скрыть вложение кортежей, когда имеется более 8 элементов. ,
Конечно, я думаю, вы на самом деле спрашиваете, почему в C # 4.0 нет синтаксического сахара для работы с кортежами. Я думаю, что главная причина, почему это не так, заключается в том, что он поощряет легкий стиль программирования, который обычно не поддерживается в C # (но очень хорошо работает для программистов F #).
В F # совершенно нормально писать код, который выглядит следующим образом:
let parseRecord rc =
// some code to parse the argument
let (left, top, wid, hgt, str) = parseRecord record
Однако этот код оправдан только на ранней стадии разработки (при написании прототипа и экспериментов) или если функциональность очень локализована (используется в одной функции). В более развитой версии кода вы, вероятно, заменили бы ее более подходящей структурой данных (например, F # запись), чтобы сделать код более читабельным, и я думаю, что именно это люди обычно делают в F #
С другой стороны, если бы C # propgrammer написал что-то вроде следующего кода, люди были бы очень напуганы тем, насколько нечитаемым является код:
{ int, int, int, int, string } ParseRecord(string record) {
// some code to parse the argument
}
var (left, top, wid, hgt, str) = ParseRecord(record);
Итак, я думаю, что общий стиль программирования на C # просто менее подходит для легких функций, таких как кортежи и сопоставление с образцами на кортежах, потому что он не очень хорошо работает с остальным языком.
Конечно, может быть более хороший способ поддержать это в C #, и он может быть добавлен в будущем, однако я думаю, что интеграция этой функции будет более сложной, чем в F #. Кроме того, анонимные типы выполняют те же функции, что и кортежи (но только локально), поэтому в некоторых случаях вам действительно не нужны кортежи в C #.