Я хотел бы использовать функцию именования ValueTuple следующим образом:
IEnumerable<(string, char, int)> valueTuples = new(string, char, int)[]
{
("First", '1', 1),
("Second", '2', 2),
("Third", '3', 3)
};
var projection1 = valueTuples.Select(((string s, char c, int i) tuple) => tuple.i);
Но это не компилируется с сообщением об ошибке, которое не очень полезно. Однако они оба компилируются:
var projection2 = valueTuples.Select(tuple => tuple.Item1);
var projection3 = valueTuples.Select(((string, char, int) tuple) => tuple.Item1);
При более прямом подходе это НЕ компилируется, НО выдает ошибку
сообщение, которое более полезно:
var projection4 = Enumerable.Select(
valueTuples, ((string s, char c, int i) tuple) => tuple.i);
Что приводит к попытке этого, что компилирует:
var projection5 = Enumerable.Select<(string, char, int), int>(
valueTuples, ((string s, char c, int i) tuple) => tuple.i);
Что, наконец, вдохновляет это, что составляет:
var projection6 = valueTuples.Select<(string, char, int), int>(
((string s, char c, int i) tuple) => tuple.i);
Это общая проблема с методами расширения IEnumerable?
Это появилось бы не потому, что это компилируется:
var filtered = valueTuples.Where(((string s, char c, int i) tuple) => tuple.i > 1);
Почему я должен прибегнуть к синтаксису projection6, чтобы заставить это работать?