Avec c# 7 tuple de la syntaxe, est-il possible de spécifier un lambda avec un tuple comme paramètre et utilisez déballé valeurs à l'intérieur de la lambda?
Exemple:
var list = new List<(int,int)>();
normal pour utiliser un tuple dans lambda:
list.Select(value => value.Item1*2 + value.Item2/2);
j'ai attendu quelques nouvelles de sucre pour éviter .Item1
.Item2
, comme:
list.Select((x,y) => x*2 + y/2);
La dernière ligne ne fonctionne pas car il est traité comme deux paramètres pour lambda. Je ne suis pas sûr si il ya un moyen de le faire réellement.
EDIT:
J'ai essayé le double parentesis en lambda définition et ça ne fonctionne pas: ((x,y)) => ...
, et c'était peut-être stupide pour essayer, mais la double parenthèse effectivement le travail ici:
list.Add((1,2));
Aussi, ma question n'est pas tout à fait à propos en évitant laid noms par défaut .Item .Item2
, c'est un réel déballage d'un tuple dans lambda (et peut-être pourquoi il n'est pas mis en œuvre ou non possible). Si vous êtes venu ici pour une solution à défaut, les noms, lire Sergey Berezovskiy de réponse.
EDIT 2:
Juste la pensée d'une manière plus générale: est-il possible (ou pourquoi pas), pour "démolir" n-uplet passés à une méthode? Comme ceci:
void Foo((int,int)(x,y)) { x+y; }
Au lieu de cela:
void Foo((int x,int y) value) { value.x+value.y }