C#out参数vs返回

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

 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(); } } 

第一个是我一般会这样做的。 我有可能想要使用而不仅仅是返回声明吗? 我知道ref允许双向通信,并且我通常不应该使用ref除非函数正在对我发送它的变量做一些事情。

但是out和return语句之间有区别,如上所示? 语法是否有理由支持其中一个?

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

Int32.Parse一个优点是速度,因为可以避免exception。 在另一个问题中提出了一些基准测试: 解析性能(If,TryParse,Try-Catch)

当您想要从方法返回多个值时,主要使用out关键字,而不必将值包装在对象中。

一个示例是Int32.TryParse方法,它具有返回值(表示尝试成功的布尔值)和out参数,如果解析成功,则该参数获取值。

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

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

您可以有多个输出参数,因此如果需要返回多个值,则比为返回值创建特殊类要容易一些。

关注一个变量并且返回正常。 但是,如果您想返回超过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. }