是否可以解构ValueTuple参数?

是否有可能解构一个没有从方法返回的元组,但是是一个out参数? 我不确定我是正确表达自己还是使用正确的术语,所以这里有一些例子:

void OutMethod(out (int aNumber, string someText) output) => output = (15, "yo"); void Usage() { { // Works, of course. OutMethod(out var tuple); // But *slightly* aesthetically unappealing to use. var usage = $"{tuple.someText}: {tuple.aNumber}"; } { // Would be awesome, but doesn't work. OutFunction(out var(number, text)); } { // Would be awesome too, but doesn't work. OutFunction(out (var number, var text)); } { // This doesn't work either. OutFunction((out var number, out var text)); } { // Not even this. OutFunction((out int number, out string text)); } { // Or this. OutMethod(out (int number, string text)); } { // Or this. int number; string text; OutMethod(out (number, text)); } } 

顺便说一句,不要抱怨。 只是想知道我是否遗漏了什么。

目前这是不可能的。 此外,根据CSharplang github回购的评论 :

这是我们在LDM [语言设计会议]中讨论的事情,当我们进行分类并决定不做,至少在不久的将来……

因此,在未来一段时间内,它可能仍然“不可能”。

虽然另一个答案是正确的,因为它不能作为函数调用的一部分在一行中完成,您当然可以根据需要手动解构out参数:

 OutMethod(out var tuple); (int aNumber, string someText) = tuple; var usage = $"{someText}: {aNumber}"; 

这至少可以解决您的使用问题。