10

所以我是 C# 新手,我很难理解out。而不是仅仅从函数中返回一些东西

using System;
class ReturnTest
{
    static double CalculateArea()
    {
         double r=5;
         double area = r * r * Math.PI;
         return area;
    }

    static void Main()
    {
         double output = CalculateArea();
         Console.WriteLine("The area is {0:0.00}", output);
    } 
 }

比较这个

 using System;
 class ReturnTest
 {
     static void CalculateArea(out double r)
     {
         r=5;
         r= r * r * Math.PI;
     }

     static void Main()
     {
         double radius;
         CalculateArea(out radius);
         Console.WriteLine("The area is {0:0.00}",radius );
         Console.ReadLine();
     }
}

第一个是我通常会怎么做。我是否有理由想使用out而不是仅仅使用 return 语句?我知道这ref允许 2 路通信,并且我通常不应该使用ref,除非该函数正在对我发送的变量执行某些操作。

但是,out 和 return 语句之间有区别吗,如上所示?语法方面是否有理由偏爱其中一个?

4

5 回答 5

15

一个很好的使用out而不是return结果的Try模式是您可以在某些 API 中看到的模式,例如Int32.TryParse(...). 在此模式中,返回值用于表示操作成功或失败(与异常相反),而out参数用于返回实际结果。

其优点之一Int32.Parse是速度,因为避免了异常。在另一个问题中提出了一些基准:解析性能(如果,TryParse,Try-Catch)

于 2012-06-26T17:27:07.423 回答
8

out当您想从一个方法返回多个值,而不必将这些值包装在一个对象中时,通常会使用该关键字。

一个例子是Int32.TryParse方法,它既有一个返回值(一个表示尝试成功的布尔值),也有一个out在解析成功时获取该值的参数。

该方法可以返回一个同时包含布尔值和整数的对象,但这需要在堆上创建对象,从而降低了方法的性能。

于 2012-06-26T17:31:32.050 回答
4

out只有当我需要从一个方法返回多个东西时,我才倾向于使用。Out让您避免将多个对象包装到一个类中以进行返回。查看Microsoft Out 页面上的示例。

于 2012-06-26T17:27:40.373 回答
2

你可以有多个输出参数,所以如果你需要返回多个值,这比为你的返回值创建一个特殊的类要容易一些。

于 2012-06-26T17:26:25.583 回答
1

当关注一个变量时,返回即可。但是如果你想返回超过 1 个值怎么办?Out对此有帮助。

static void CalculateArea(out double r, out double Foo)
{
    //Can return 2 values in terms of out variables.
}

static double CalculateArea(double r)
{
     // Will return only one value.
}
于 2012-06-26T17:25:51.433 回答