1

私は新しい C# で、現在 Murach の C# 2012 を読んでいます。 out として定義された引数に値を割り当てるメソッドに出くわしましたが、これについては少し混乱しています。他の言語では、メソッドが複数の値を返す必要がある場合、複数の値を含むオブジェクトを返すことができます。ただし、メソッド内で「out」を使用する方法がわかりません。MSDN のオンライン リソースも参照していますが、「out」の使用方法はまだ明確ではありません。たとえば、4 つの引数を取るメソッドを作成したい場合、このメソッドで "out" として定義された引数に値を代入するにはどうすればよいでしょうか。

private void calcValues(decimal decVal, out decimal decHigh, out decimal decMid, out decimal decLow)
{
    decimal highVal = 0.00M;
    decimal midVal = 0.00M;
    decimal lowVal = 0.00M;

    highVal = (decVal * decHigh);
    midVal = (decVal * decMid);
    lowVal = (decVal * decLow);

}//CALCVALUES METODH END

誰かがこの「アウト」メカニズムを理解するのを手伝ってくれれば幸いです。これについてオンライン検索を行いましたが、単純なバニラの例を思いつくことができませんでした.

ありがとうございました。

4

4 に答える 4

5

あなたは...それらに割り当てるだけです:

decHigh = 0M;
decMid = 13M;
decLow = 42M;

それらは であるため、 「確実に割り当てられる」までは読み取るoutことができないことに注意してください。エントリ時の値は定義されていません。これは、呼び出し元がこれを実行できるようにするためです。

decimal foo;
if(SomeMethod("bar", out foo)) {...}

に任意の値を代入するのではなくfoo:

decimal foo = 0M;
if(SomeMethod("bar", ref foo)) {...}

ただし、お気づきのとおり、out理解が不十分です。また、単純に3 つの値を持つものを返すことを検討することもできます。

private SomeType CalculateValues(decimal decVal) {
    //... some maths...
    return new SomeType(...);
}
于 2013-09-24T21:20:20.863 に答える
0

これらの out 変数には実際には何も割り当てていないため、変更されていません。計算を行った後、保存したい値をそれらの変数に代入するだけです。メソッドでそれらを再宣言する必要はないことに注意してください。

于 2013-09-24T21:24:33.087 に答える
0

いつもお世話になっております。1つまたは複数の値のメソッド呼び出しで「out」を使用する方法がわかりませんでした。Murach の 2012 C# は良い本ですが、詳細が欠けていますが、それは私の意見です。だから、これは私が「アウト」を使用することになった方法です:

    decimal cdecLUX_RATE = 0.06M;               //LUXURY TAX RATE
    decimal cdecSTATE_RATE = 0.05M;             //STATE TAX RATE
    decimal cdecDEALER_FEES = 0.15M;            //DEALER FEES

    decimal decFullPrice = 30000.0M             //FULL PRICE
    decimal decLuxTax = 0.00M;                  //LUX TAX
    decimal decStateTax = 0.00M;                //STATE TAX 
    decimal decDealerFees = 0.00M;              //DEALER FEES  


    //CALCTAXES METHOD CALL
    calcTaxes(decFullPrice, out decLuxTax, out decStateTax, out decDealerFees);     

    private void calcTaxes(decFullPrice, out decimal decLuxTax, out decimal decStateTax, out decimal decDealerFees)
    {
        decLuxTax = (decFullPrice * cdecLUX_RATE);
        decStateTax = (decStatePrice * cdecSTATE_RATE);
        decdecDealerFees = (decFullPrice * cdecDEALER_FEES);
    }//CALCTAXES METODH END

これは正しい方法ではないかもしれませんが、私はまだ足を濡らしています。ありがとうございました。

于 2013-10-01T00:04:59.280 に答える