繁体   English   中英

是否可以解构ValueTuple参数?

[英]Is it possible to deconstruct out ValueTuple parameters?

是否有可能解构一个未从方法返回的元组,但是是一个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));
    }
}

BTW,不抱怨。 只是想知道我是否遗漏了什么。

目前这是不可能的。 此外,根据这篇关于CSharplang github repo的评论

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM