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

最初のものは、私が一般的に行う方法です。outreturn ステートメントの代わりに使用したい理由はありますか? 双方向通信が可能であり、関数が送信している変数で何かを実行していない限り、ref通常は使用すべきではないことを理解しています。ref

ただし、上記のように、out ステートメントと return ステートメントに違いはありますか? 構文に関して、どちらか一方を優先する理由はありますか?

4

5 に答える 5

15

結果のout代わりに を使用すると、たとえば. このパターンでは、戻り値は (例外ではなく) 操作の成功または失敗を通知するために使用され、パラメーターは実際の結果を返すために使用されます。returnTryInt32.TryParse(...)out

に関する利点の 1 つは、Int32.Parse例外が回避されるため、速度です。いくつかのベンチマークは、この別の質問で示されています:解析パフォーマンス (If、TryParse、Try-Catch)

于 2012-06-26T17:27:07.423 に答える
8

このoutキーワードは、オブジェクトで値をラップすることなく、メソッドから複数の値を返したい場合に主に使用されます。

例としてInt32.TryParse、戻り値 (試行の成功を表すブール値) とout、解析が成功した場合に値を取得するパラメーターの両方を持つメソッドがあります。

メソッドは、ブール値と整数の両方を含むオブジェクトを返すことができますが、オブジェクトをヒープ上に作成する必要があり、メソッドのパフォーマンスが低下します。

于 2012-06-26T17:31:32.050 に答える
4

私がよく使うoutのは、1 つのメソッドから複数のものが返される必要があるときだけです。Out返すために複数のオブジェクトをクラスにラップすることを避けることができます。Microsoft Out ページで例を確認してください。

于 2012-06-26T17:27:40.373 に答える
2

複数の出力パラメーターを使用できるため、複数の値を返す必要がある場合は、戻り値用の特別なクラスを作成するよりも少し簡単です。

于 2012-06-26T17:26:25.583 に答える
1

1つの変数が関係している場合、outとreturnはOKです。しかし、複数の値を返したい場合はどうすればよいでしょうか? 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 に答える