# C# Language Design Notes for Sep 6, 2016 ## Agenda 1. How do we select `Deconstruct` methods? # How do we select Deconstruct methods? `(int x, var y) = p` cannot just turn into `p.Deconstruct(out int x, out var y)`, because we want it to find a `Deconstruct` method with a more specific type than `int`, e.g. `byte`. We should look only at the arity of the `Deconstruct` method. If there's more than one with the given arity, we fail. If necessary, we will then translate this into passing temporary variables to the `Deconstruct` method, instead of the ones declared in the deconstruction. E.g., if `p` has ``` C# void Deconstruct(out byte x, out byte y) ...; ``` We would translate it equivalently to: ``` c# p.Deconstruct(out byte __x, out byte __y); (int x, int y) = (__x, __y); ```