class Program
{
public static (int First, string Second) TupleField;
static (int x, string y) Tuple;
static ref (int x, string y) var(int x, string y)
{
return ref Tuple;
}
static ref (int x, string y) Foo(int x, string y)
{
return ref Tuple;
}
static void Main()
{
var tuple = (42, "b");
var(a, b) = tuple; // объявление двух локальных переменных.
Foo(a, b) = tuple; // а здесь вызов метода!
var(a, b); // и здесь вызов метода! Не путать! :)
}
}
Вот на хрена сначала было делать var контекстным ключевым словом, а потом делать исключения для него?
Причем на выпуск спецификаций C# Microsoft забил, так что описание всей этой магии отсутствует. Если я не прав, бросьте в меня ссылкой.
Сейчас пилю поддержку фич 7-го Шарпа на Nitra. Приходится заниматься реверс-инжинирингом логики этих бравых парней.