【发布时间】:2017-09-02 20:02:09
【问题描述】:
我目前正在努力理解当它声明使用 'out' 关键字我们能够返回多个值时它的含义。例如,来自 msdn 站点 (https://msdn.microsoft.com/en-us/library/ee332485.aspx):“...以下示例通过单个方法调用使用 out to return 三个变量。”
class OutReturnExample
{
static void Method(out int i, out string s1, out string s2)
{
i = 44;
s1 = "I've been returned";
s2 = null;
}
static void Main()
{
int value;
string str1, str2;
Method(out value, out str1, out str2);
// value is now 44
// str1 is now "I've been returned"
// str2 is (still) null;
}
}
我不确定我是否只是没有正确阅读描述,但似乎 Method() 实际上并没有返回(不使用'return'关键字)任何东西,并且基本上分配了字段(同样通过参考)。这与他们声明使用“out”可以返回多个值的其他来源一致。我是误解了返回词的上下文还是我没有正确理解这个概念?
【问题讨论】:
-
out关键字意味着在方法调用之后,这些变量必须分配一些东西。 -
在语义上等价于return。你调用一个方法,你的“输出”变量填充了结果,就像你调用一个返回类型的方法并让一个变量填充结果一样。
-
out关键字意味着外部范围内的所有值都将被“创建”和“分配”。您可以说它们已被退回,因为out声明合同必须在当前方法中更改这些值。 -
你可能误解了返回词的上下文 =) 这不是“传递一些值” - 它是“返回执行 from 方法” .你的第一个
void方法可以重写为static void Merhod(...) { ... ; s2 = null; return; }编译器允许你在最后省略return,因为很明显你正在从该方法返回,因为没有什么可做的了。
标签: c# return keyword terminology out