我目前正在努力理解使用“out”关键字我们能够返回 多个值的含义。例如,来自 msdn 站点 ( https://msdn.microsoft.com/en-us/library/ee332485.aspx ):“...以下示例使用 out 通过单个方法调用返回 三个变量。”
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”可以返回多个值。我是不是误解了返回词的上下文,还是我没有正确理解这个概念?
最佳答案
该方法确实没有像您正确注意到的那样返回值。 ref
和 out
都使用引用。
ref
将让编译器知道该变量在进入函数之前应该已经初始化(这在您在该函数之前使用该变量并且现在想更改某些内容时很有用)。 out
将让编译器知道该对象已在其调用的函数内初始化。所以 ref
是双向的,out
是 out-only。
所以,是的,它实际上并没有返回任何东西。但另一方面,它会为您的变量赋值,您的调用方法也会通过这些变量以新值结束。从本质上讲,您可以将此视为返回。
简而言之:
ref
参数 - 这些具有与 C++ 引用相同的功能 参数和out
参数 - 这些允许从方法传回数据,但不允许 进入方法。
我还建议您阅读 this SO answer和 corresponding blog关于参数传递的 Jon Skeet。它会给你很多关于这个概念的信息。正如 Jon Skeet 所说,使用 ref
和 out
时要小心:
It's basically a way of getting another return value, and should usually be avoided precisely because it means the method's probably trying to do too much.
关于c# - 在 C# 中使用 'out' 关键字返回多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43278063/