2

私がやりたいことは、任意の数の変数を関数に渡し、関数内でそれらの変数を操作し、関数のスコープ外でそれらの操作にアクセスできるようにすることです。

void FunctionA()
{
    int x = 1;
    string s = "blah";
    int y = 4;
    FunctionB(out x, out s, out y);
    Console.WriteLine("{0}, {1}, {2}", x, s, y);
}
void FunctionB(out params object[] parameters)
{
    for(int ii = 0; ii < parameters.Length; ii++)
    {
        if(parameters[ii] is int) parameters[ii] = (int)parameters[ii] + 1;
    }
}

FunctionA() を呼び出した後、コンソールには「2、何とか、5」が表示されます。オブジェクト[]を返し、必要な変数を解析する以外にこれを行う方法はありますか?

明確にするために、これが私がやろうとしていることです。多数の変数とともに byte[] を関数に渡します。byte[] から情報を読み取って、渡された変数に割り当てようとします。つまり、int、string、および byte[] に書き込まれた別の int があり、次のようなものを渡します。

int x, y;
string s;
byte[] info = ...;
FunctionB(info, x, s, y);
Console.WriteLine("{0}, {1}, {2}", x, s, y);

byte[] から情報を出力します。

4

3 に答える 3

4

いいえ、できません。

ここでは、単一の出力パラメーターを取得していますが、いくつかの個別の出力パラメーターが必要です。paramsC# は...経由でそれをサポートしておらず、サポートしparamsたいパラメーターの最大数までオーバーロードしない限り、さまざまな数のパラメーターを取得する唯一の方法です。

params常に引数のを新しい配列にコピーします。その時点で、それらは元の変数から切り離されます。

于 2010-07-21T21:49:40.493 に答える
0

アウトが必要ですか?実際のコードを教えていただけますか?これは、あなたが投稿したものについて私が言えることから機能します...

void Main()
{
    object [] f = new object []{ 1, "blah", 4 };
    Test( f );
    Console.WriteLine("{0}, {1}, {2}", f[0], f[1], f[2]);
    // output
    // 2, blah, 5 

}

void Test ( object[] parameters )
{
    for(int ii = 0; ii < parameters.Length; ii++)
    {
        if(parameters[ii] is int) 
            parameters[ii] = (int)parameters[ii] + 1;
    }
}
于 2010-07-21T22:00:08.590 に答える
0

ご存知のように、あなたの「説明」は元の質問とはかなり異なります。逆シリアル化コードを記述しようとしているようです。まず、MSDN シリアル化のドキュメントを読んで、.NET が提供できる機能について詳しく理解してください。特定の状況で自己逆シリアル化オブジェクトを作成するのがやり過ぎの場合は、BinaryReaderを使用してデータを読み取ることを検討する必要があります。

byte[] info...
int x;
string s;
int y;

using (BinaryReader reader = new BinaryReader(new MemoryStream(info)))
{
    x = reader.ReadInt32();
    s = reader.ReadString();
    y = reader.ReadInt32();
}

データのエンコーディングが BinaryReader が期待するものと一致しない場合は、 BinaryReader.ReadeByte() の上に独自の関数を構築する必要がある場合があることに注意してください。また、バッファから「多数の変数」を埋める関数にはコード臭があることに注意してください...確かにこれらの変数は何らかの方法で関連しており、(デシリアライザーを使用して)クラスを定義する機会があります。そのコンセプトが何であれ。

于 2010-07-21T23:02:24.697 に答える