2

私はc#を使用しています。

複数の値を出力する方法があります。私はoutを認識していますが、これは参照型です。値型に相当するものはありますが、メソッドから複数の値を出力することもできます。参照タイプでは、メソッドの外部でも値が変更されるので、防止したいと思います。

    out
4

4 に答える 4

8

私はoutを認識していますが、これは参照型です。

あなたが何を意味するのかは明確ではありません。out型ではありません-パラメータのデコレータです。参照型または値型で使用できます。

// Nasty, but it does work...
void SplitInTwo(string input, out string x1, out string x2, 
                out int actualSplitCount)
{
    string[] bits = input.Split('/');
    x1 = bits[0];
    x2 = bits[1];
    actualSplitCount = bits.Length;
}

したがって、どちらの方法でも使用できoutます。ただし、そうしないことを強くお勧めします。Tupleアドホックな複数の値にタイプのファミリーを使用できますが、戻り値が実際に関連している場合は、それらを別のタイプにカプセル化し、そのタイプの値を返すことを検討する必要があります。

于 2012-06-21T18:23:42.057 に答える
1

戻り値を記述し、返す必要のある各値のプロパティを持つクラスを作成することをお勧めします。

結果を頻繁に渡す必要がない場合は、タプルが適切なオプションですが、一般に、維持するのは困難です。タプルが提供するItem1、Item2、Item3などではなく、意味のあるプロパティ名を使用する方が好きです。outパラメーターも機能しますが、メソッドの実装に対応するために呼び出し元のコードを別の方法で記述する必要があります。可能な限り避けることをお勧めします。

于 2012-06-21T18:31:14.277 に答える
0

outキーワード(およびキーワード)はref、変数が呼び出し元のスコープから提供されることを示すために使用されます。問題のタイプの性質は変わりません。

outパラメータ修飾子(C#リファレンス)@ MSDN

out呼び出し元がメソッドを使用するたびに指定を強制されることを懸念している場合は、Helperクラスまたはaを使用して、Tuple返された値のセットをラップできます。

タプルクラス@MSDN

参照型が変更されることを懸念しているとのことですが。これはあなたの方法にとって問題ではないはずです。で指定されたパラメーターoutは、メソッドが使用される可能性のあるすべてのケースで共有されるわけではなく、メソッドが呼び出されるスコープに対してローカルです。発信者だけが心配する必要があり、自分の範囲内でのみです。

最後に、必要に応じて変数に値を割り当てる必要なしに変数を変更または使用できることを示したい場合outは、を使用しますref

于 2012-06-21T18:23:00.163 に答える
0

の線に沿った何か:

class MultiValue
{
    type A {
        get { return m_A; }
        set { m_A = value; }
    }

    type B{
        get { return m_B; }
        set { m_B = value; }
    }

    private type m_A;
    private type m_B;
}

何をしようとしているかによっては機能する可能性があります(単一のインスタンスで値を返すか、一定期間/メソッドにわたってそれらの値を維持する必要がある場合)。

しかし、Tupleタイプも同様の効果を達成し、プログラムで何をしたいかに応じてより良い結果が得られます。

于 2012-06-21T18:31:26.017 に答える