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

标签 c# return keyword terminology out

我目前正在努力理解使用“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/

相关文章:

c# - 使用 DbGeography 的 MultiPolygon 和 Polygon 的交集

java - return 语句后方法中发生了什么

c++ - 什么时候应该在 C++ 中使用 new 关键字?

c++ - 在 C++ 中尽可能使用 const?

python - 普通参数与关键字参数

c# - 检测SQL Server 2008 R2

c# - 如何让 ReSharper 停止在我的 MSpec 成员上放置显式访问修饰符?

c# - 使用 .NET 从 Google Analytics API 检索数据,多个指标?

c++ - main函数返回不会返回高位整数

Jquery every - 停止循环并返回对象