【发布时间】:2017-12-15 13:29:53
【问题描述】:
是否可以解构一个不是从方法返回的元组,而是一个输出参数?我不确定我是否正确地表达了自己,甚至是否使用了正确的术语,所以这里有一些例子:
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));
}
}
顺便说一句,没有抱怨。只是想知道我是否遗漏了什么。
【问题讨论】:
-
我认为在
out参数中允许元组解构是毫无意义的,因为您可以轻松地创建两个不同的out变量。 -
@DavidG 不适用于泛型类型。这出现在我的案例中,因为我试图在
Dictionary<string,(int someNumber, string someString)>上尽可能优雅地使用TryGetValue。 -
到那时,我可能会质疑元组是否是正确使用的类型,也许结构或类更合适?
-
@DavidG 字典是类内部的私有元素,而不是公共 API 的一部分。我不相信添加自定义类会在我的情况下提供任何特殊好处。它当然不允许解构元素。
-
是的,对我来说看起来很容易理解,不知道为什么 5 个人不这么认为。