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. }