Ist es mit der neuen C # 7-Tupelsyntax möglich, ein Lambda mit einem Tupel als Parameter anzugeben und entpackte Werte innerhalb des Lambda zu verwenden?
Beispiel:
var list = new List<(int,int)>();
normale Art, ein Tupel in Lambda zu verwenden:
list.Select(value => value.Item1*2 + value.Item2/2);
Ich erwartete etwas neuen Zucker zu vermeiden .Item1
.Item2
, wie:
list.Select((x,y) => x*2 + y/2);
Die letzte Zeile funktioniert nicht, da sie als zwei Parameter für Lambda behandelt wird. Ich bin mir nicht sicher, ob es tatsächlich einen Weg gibt, dies zu tun.
BEARBEITEN:
Ich habe versucht, doppelte Klammern in der Lambda-Definition zu verwenden, und es hat nicht funktioniert: ((x,y)) => ...
und vielleicht war es dumm, es zu versuchen, aber doppelte Klammern funktionieren hier tatsächlich:
list.Add((1,2));
Außerdem geht es bei meiner Frage nicht ganz darum, hässliche Standardnamen zu vermeiden .Item .Item2
, sondern darum, ein Tupel in Lambda tatsächlich zu entpacken (und vielleicht, warum es nicht implementiert oder nicht möglich ist). Wenn Sie hierher gekommen sind, um eine Lösung für Standardnamen zu finden, lesen Sie die Antwort von Sergey Berezovskiy .
EDIT 2:
Ich dachte nur an einen allgemeineren Anwendungsfall: Ist es möglich (oder warum nicht), ein an eine Methode übergebenes Tupel zu "dekonstruieren"? So was:
void Foo((int,int)(x,y)) { x+y; }
An Stelle von:
void Foo((int x,int y) value) { value.x+value.y }