gpt4 book ai didi

c# - 在 C# 中使用 'out' 关键字返回多个值

转载 作者:行者123 更新时间:2023-11-30 13:18:49 24 4
gpt4 key购买 nike

我目前正在努力理解使用“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”可以返回多个值。我是不是误解了返回词的上下文,还是我没有正确理解这个概念?

最佳答案

该方法确实没有像您正确注意到的那样返回值。 refout 都使用引用。

ref 将让编译器知道该变量在进入函数之前应该已经初始化(这在您在该函数之前使用该变量并且现在想更改某些内容时很有用)。 out 将让编译器知道该对象已在其调用的函数内初始化。所以 ref 是双向的,out 是 out-only。

所以,是的,它实际上并没有返回任何东西。但另一方面,它会为您的变量赋值,您的调用方法也会通过这些变量以新值结束。从本质上讲,您可以将此视为返回。

简而言之:

  • ref 参数 - 这些具有与 C++ 引用相同的功能参数和

  • out 参数 - 这些允许从方法传回数据,但不允许进入方法。

我还建议您阅读 this SO answercorresponding blog关于参数传递的 Jon Skeet。它会给你很多关于这个概念的信息。正如 Jon Skeet 所说,使用 refout 时要小心:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com